Linux系统中tracert命令使用详解 |
您所在的位置:网站首页 › tracert-w › Linux系统中tracert命令使用详解 |
Linux系统中Tracert命令用来显示数据包到达目标主机是所经过的路径。下面由我为大家整理了linux系统中tracert命令使用详解,希望对大家有帮助! Linux系统中tracert命令使用详解 Tracert命令用来显示数据包到达目标主机所经过的路径,并显示到达每个节点的时间。命令功能同Ping类似,但它所获得的信息要比Ping命令详细得多,它把数据包所走的全部路径、节点的IP以及花费的时间都显示出来。该命令比较适用于大型网络。 命令格式: tracert IP地址或主机名 [-d][-h maximumhops][-j host_list] [-w timeout] 参数含义: -d 不解析目标主机的名字 -h maximum_hops 指定搜索到目标地址的最大跳跃数 -j host_list 按照主机列表中的地址释放源路由 -w timeout 指定超时时间间隔,程序默认的时间单位是毫秒。 linux系统中tracert命令用法 tracert [-d] [-h maximum_hops] [-j computer-list] [-w timeout] target_name 如果不使用参数,将显示连接情况,如图2-23所示。 提示: 图2-23显示的是从本地计算机到163这台服务器所经过的计算机。 ● -d 指定不将地址解析为计算机名,如图2-24所示。 ● -h maximum_hops 指定搜索目标的最大跃点数,如图2-25所示。 ● -j computer-list 指定沿computer-list的稀疏源路由。 ● -w timeout 每次应答等待timeout指定的微秒数,如图2-26所示。 补充:linux系统中tracert命令原理 tracert命令也称作路由跟踪命令,用于确定IP数据库包访问目标所采取的路径,通过IP生成时间(TTL)字段和ICMP错误信息来确定,从个网络到主机之间的网络状况。 tracert命令原理与ping命令为相似,都是通过向目标发送数据包,并通过数据包响应及丢失情况,从而判断本地与目标主机之间的网络状况,所不同的是tracert命令能够反映出网络中各个路由节点信息,以及网络状况,并且可以用以跟踪路由节点,以及监控服务器状况等作用。 你不记得如何在代码中插入探针点了吗? 没问题!了解如何使用uprobe和kprobe来动态插入它们吧。 基本上,程序员需要在源代码汇编指令的不同位置插入动态探针点。探针点 探针点是一个调试语句,有助于探索软件的执行特性(即,执行流程以及当探针语句执行时软件数据结构的状态)。printk是探针语句的最简单形式,也是黑客用于内核攻击的基础工具之一。 因为它需要重新编译源代码,所以printk插入是静态的探测方法。内核代码中重要位置上还有许多其他静态跟踪点可以动态启用或禁用。 Linux内核有一些框架可以帮助程序员探测内核或用户空间应用程序,而无需重新编译源代码。Kprobe是在内核代码中插入探针点的动态方法之一,并且uprobe在用户应用程序中执行此操作。 使用uprobe跟踪用户空间 可以通过使用thesysfs接口或perf工具将uprobe跟踪点插入用户空间代码。 使用sysfs接口插入uprobe 考虑以下简单测试代码,没有打印语句,我们想在某个指令中插入探针: [source,c\n.test.c #include stdio.h\n#include stdlib.h\n#include unistd.h 编译代码并找到要探测的指令地址: # gcc -o test test.\n# objdump -d test 假设我们在ARM64平台上有以下目标代码: 0000000000400620 func_1: 400620\t90000080\tadr\tx0, 410000 __FRAME_END__+0xf6f8 并且我们想在偏移量0x620和0x644之间插入探针。执行以下命令: # echo 'p:func_2_entry test:0x620' /sys/kernel/debug/tracing/uprobe_event\n# echo 'p:func_1_entry test:0x644' /sys/kernel/debug/tracing/uprobe_event\n# echo 1 /sys/kernel/debug/tracing/events/uprobes/enable# ./test 在上面的第一个和第二个echo语句中,p告诉我们这是一个简单的测试。(探测器可以是简单的或返回的。)func_n_entry是我们在跟踪输出中看到的名称,名称是可选字段,如果没有提供,我们应该期待像p_test_0x644这样的名字。test 是我们要插入探针的可执行二进制文件。如果test 不在当前目录中,则需要指定path_to_test / test。 0x620或0x640是从程序启动开始的指令偏移量。请注意在第二个echo语句中,因为我们要再添加一个探针。所以,当我们在前两个命令中插入探针点之后,我们启用uprobe跟踪,当我们写入events/ uprobes / enable时,它将启用所有的uprobe事件。程序员还可以通过写入在该事件目录中创建的特定事件文件来启用单个事件。一旦探针点被插入和启用,每当执行探测指令时,我们可以看到一个跟踪条目。 读取跟踪文件以查看输出: # cat /sys/kernel/debug/tracing/trac\n# tracer: no\n\n# entries-in-buffer/entries-written: 8/8\n#P:\n\n# _-----=irqs-of\n# / _----=need-resche\n# | / _---=hardirq/softir\n# || / _--=preempt-dept\n# ||| / dela\n# TASK-PID CP\n# |||| TIMESTAMP FUNCTION# | | | |||| | | 我们可以看到哪个CPU完成了什么任务,什么时候执行了探测指令。 返回探针也可以插入指令。当返回该指令的函数时,将记录一个条目: # echo 0 /sys/kernel/debug/tracing/events/uprobes/enabl\n# echo 'r:func_2_exit test:0x620' /sys/kernel/debug/tracing/uprobe_event\n# echo 'r:func_1_exit test:0x644' /sys/kernel/debug/tracing/uprobe_event\n# echo 1 /sys/kernel/debug/tracing/events/uprobes/enable 这里我们使用r而不是p,所有其他参数是相同的。请注意,如果要插入新的探测点,需要禁用uprobe事件: test-3009 [002] .... 4813.852674: func_1_entry: (0x400644) 上面的日志表明,func_1返回到地址0x4006b0,时间戳为4813.852691。 # echo 0 /sys/kernel/debug/tracing/events/uprobes/enabl\n# echo 'p:func_2_entry test:0x630' /sys/kernel/debug/tracing/uprobe_events count=%x\n# echo 1 /sys/kernel/debug/tracing/events/uprobes/enabl\n# echo /sys/kernel/debug/tracing/trace# ./test 当执行偏移量0x630的指令时,将打印ARM64 x1寄存器的值作为count =。 输出如下所示: test-3095 [003] .... 7918.629728: func_2_entry: (0x400630) count=0x1 使用perf插入uprobe 找到需要插入探针的指令或功能的偏移量很麻烦,而且需要知道分配给局部变量的CPU寄存器的名称更为复杂。 perf是一个有用的工具,用于帮助引导探针插入源代码中。 除了perf,还有一些其他工具,如SystemTap,DTrace和LTTng,可用于内核和用户空间跟踪;然而,perf与内核配合完美,所以它受到内核程序员的青睐。 # gcc -g -o test test.c# perf probe -x ./test func_2_entry=func_\n# perf probe -x ./test func_2_exit=func_2%retur\n# perf probe -x ./test test_15=test.c:1\n# perf probe -x ./test test_25=test.c:25 numbe\n# perf record -e probe_test:func_2_entry -e\nprobe_test:func_2_exit -e probe_test:test_15\n-e probe_test:test_25 ./test 如上所示,程序员可以将探针点直接插入函数start和return,源文件的特定行号等。可以获取打印的局部变量,并拥有许多其他选项,例如调用函数的所有实例。 perf探针用于创建探针点事件,那么在执行./testexecutable时,可以使用perf记录来探测这些事件。当创建一个perf探测点时,可以使用其他录音选项,例如perf stat,可以拥有许多后期分析选项,如perf脚本或perf报告。 使用perf脚本,上面的例子输出如下: # perf script 使用kprobe跟踪内核空间 与uprobe一样,可以使用sysfs接口或perf工具将kprobe跟踪点插入到内核代码中。 使用sysfs接口插入kprobe 程序员可以在/proc/kallsyms中的大多数符号中插入kprobe;其他符号已被列入内核的黑名单。还有一些与kprobe插入不兼容的符号,比如kprobe_events文件中的kprobe插入将导致写入错误。 也可以在符号基础的某个偏移处插入探针,像uprobe一样,可以使用kretprobe跟踪函数的返回,局部变量的值也可以打印在跟踪输出中。 以下是如何做: disable all events, just to insure that we see only kprobe output in trace\n# echo 0 /sys/kernel/debug/tracing/events/enabledisable kprobe events until probe points are inseted\n# echo 0 /sys/kernel/debug/tracing/events/kprobes/enableclear out all the events from kprobe_events\n to insure that we see output foronly those for which we have enabled [root@pratyush ~\n# more /sys/kernel/debug/tracing/trace# tracer: no\n\n# entries-in-buffer/entries-written: 9037/9037\n#P:8\n# _-----=irqs-of\n# / _----=need-resche\n# | / _---=hardirq/softirq#\n|| / _--=preempt-depth#\n ||| / delay# TASK-PID CPU#\n |||| TIMESTAMP FUNCTION#\n | | | |||| | | 使用perf插入kprobe 与uprobe一样,程序员可以使用perf在内核代码中插入一个kprobe,可以直接将探针点插入到函数start和return中,源文件的特定行号等。程序员可以向-k选项提供vmlinux,也可以为-s选项提供内核源代码路径: # perf probe -k vmlinux kfree_entry=kfre\n# perf probe -k vmlinux kfree_exit=kfree%retur\n# perf probe -s ./ kfree_mid=mm/slub.c:3408 \n# perf record -e probe:kfree_entry -e probe:kfree_exit -e probe:kfree_mid sleep 10 使用perf脚本,以上示例的输出: 关于Linux命令的介绍,看看《linux就该这么学》,具体关于这一章地址3w(dot)linuxprobe/chapter-02(dot)html 欢迎分享,转载请注明来源:内存溢出 原文地址:https://outofmemory.cn/yw/7283898.html |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |