TCPDUMP是一款数字化界面的抓包工具,它的魅力在于内嵌的命令可以随意组合抓取对自己有用的包
我用抓取的pcap文件来做个简单的演示
src host <IP>是查看源IP的请求 -X是以16进制显示 那么tcp[13]是个什么意思,我也是研究了一下搞明白了,我们抓取的tcp协议的报文图是这样的
每一个tcp数据有4个字节,8个位为一个字节,第四层协议中数据偏移量(data offset)和保留位(res)各占用4各位,后面的8个位就是flag位,标记的是数据的请求、响应、数据的交换tcp[13]表示的就是psh标签(tcp三次握手后开始的第一个数据发送),来看看wireshark之中falg位的示意图
如果我们屏蔽掉tcp的握手只查看数据的发送那么用二进制表示即为00011000转换成10进制为24,其转换的原理为第一位数(从右至左)最大位1,第二位最大位2,第三位最大位4依次往后类推,占用则用1表示,空位则用0表示,AP(ack和psh)位为16和8,8+16=24,那么tcp[13] = 24抓取的则是tcp的AP数据
tcpdump用于捕获和分析网络流量。系统管理员可以使用它来查看实时流量或将输出保存到文件中并在以后进行分析。下面列出6个常用选项
-D 选项
tcpdump的-D获取接口设备列表。看到此列表后,可以决定要在哪个接口上捕获流量。它还告诉你接口是否已启动、正在运行,以及它是否是环回接口,如下所示:
[root@localhost ~]# tcpdump -D1ens160 [Up, Running]2lo [Up, Running, Loopback]3any (Pseudo-device that captures on all interfaces) [Up, Running]4bluetooth-monitor (Bluetooth Linux Monitor) [none]5nflog (Linux netfilter log (NFLOG) interface) [none]6nfqueue (Linux netfilter queue (NFQUEUE) interface) [none]7usbmon0 (All USB buses) [none]8usbmon1 (USB bus number 1)9usbmon2 (USB bus number 2)
-c [数字]选项
-c 选项捕获 X 个数据包,然后停止。否则,tcpdump 将无限地继续运行。因此,当只想捕获一小部分数据包样本时,可以使用此选项。但是如果接口上没有数据流量,tcpdump 会一直等待。
[root@localhost ~]# tcpdump -c 5 -i any
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
17:33:47713379 IP localhostlocaldomainssh > 19216843139970: Flags [P], seq 714380127:714380371, ack 1854022435, win 388, length 244
17:33:47713785 IP localhostlocaldomain36821 > _gatewaydomain: 36365+ PTR 143168192in-addrarpa (43)
17:33:47713939 IP 19216843139970 > localhostlocaldomainssh: Flags [], ack 244, win 4104, length 0
17:33:47716053 IP _gatewaydomain > localhostlocaldomain36821: 36365 NXDomain 0/1/0 (78)
17:33:47716543 IP localhostlocaldomain57441 > _gatewaydomain: 61445+ PTR 13143168192in-addrarpa (45)
5 packets captured
9 packets received by filter
0 packets dropped by kernel
-n 选项
-n选项不将IP地址解析为域名,直接以IP地址显示:
[root@localhost ~]# tcpdump -c 5 -i any -n
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
17:36:38980756 IP 19216843131ssh > 19216843139970: Flags [P], seq 714383039:714383283, ack 1854024303, win 388, length 244
17:36:38981032 IP 19216843131ssh > 19216843139970: Flags [P], seq 244:440, ack 1, win 388, length 196
17:36:38981096 IP 19216843131ssh > 19216843139970: Flags [P], seq 440:604, ack 1, win 388, length 164
17:36:38981153 IP 19216843131ssh > 19216843139970: Flags [P], seq 604:768, ack 1, win 388, length 164
17:36:38981208 IP 19216843131ssh > 19216843139970: Flags [P], seq 768:932, ack 1, win 388, length 164
5 packets captured
5 packets received by filter
0 packets dropped by kernel
>
大部分 Linux 发行版都内置了 Tcpdump 工具。如果没有,也可以直接使用对应的包管理器进行安装(如: $ sudo apt-get install tcpdump 和 $ sudo yum install tcpdump )
通过表达式可以对各种不同类型的网络流量进行过滤,以获取到需要的信息。这也是 tcpdump 强大功能的一个体现。
主要有 3 种类型的表达式:
指定网络接口 :
# tcpdump -i <dev>
原始信息输出模式 :
# tcpdump -ttttnnvvS
更详细的输出,不解析主机名和端口名,使用绝对序列号,方便阅读的时间戳
通过IP地址过滤 :
# tcpdump host 102641
HEX 输出
# tcpdump -nnvXSs 0 -c1 icmp
通过源地址和目标地址进行过滤
# tcpdump src 10267203
# tcpdump dst 10267203
通过子网进行过滤
# tcpdump net 102640/24
监听指定端口号
# tcpdump port 515
指定协议
# tcpdmp icmp
端口范围
# tcpdump portrange 21-23
通过包大小过滤
# tcpdump less 32
# tcpdump greater 64
# tcpdump <= 128
写入 PCAP 文件
# tcpdump port 80 -w capture_file
读取 PCAP 文件
# tcpdump -r capture_file
可以通过命令选项的不同组合(使用 逻辑运算符 )完成更复杂的任务。运算符包括以下3种:
# tcpdump src 1026429 and dst port 80
即捕捉从指定主机(1026492)发出,且目标端口为 80 的所有网络数据
# tcpdump src net 19216800/16 and dst net 10000/8 or 1721600/16
即捕捉从指定子网(19216800/16)发送到目标子网(10000/8 和 1721600/16)的所有网络数据
# tcpdump src 192168561 and not dst port 22
即捕捉从指定主机(192168561)发出,且目标端口不为 22 的所有网络数据
# tcpdump 'tcp[13] & 32!=0' 所有 URGENT ( URG ) 包
# tcpdump 'tcp[13] & 16!=0' 所有 ACKNOWLEDGE ( ACK ) 包
# tcpdump 'tcp[13] & 8!=0' 所有 PUSH ( PSH ) 包
# tcpdump 'tcp[13] & 4!=0' 所有 RESET ( RST ) 包
# tcpdump 'tcp[13] & 2!=0' 所有 SYNCHRONIZE ( SYN ) 包
# tcpdump 'tcp[13] & 1!=0' 所有 FINISH ( FIN ) 包
# tcpdump 'tcp[13]=18' 所有 SYNCHRONIZE/ACKNOWLEDGE ( SYNACK ) 包
其他指定标志位的方式如:
# tcpdump 'tcp[tcpflags] == tcp-syn'
# tcpdump 'tcp[tcpflags] == tcp-fin'
一些特殊的用法
# tcpdump 'tcp[13] = 6' RST 和 SYN 同时启用的数据包(不正常)
# tcpdump 'tcp[32:4] = 0x47455420' 获取 >
以上就是关于利用TCPDUMP简解TCP报文图全部的内容,包括:利用TCPDUMP简解TCP报文图、tcpdump 命令的常用选项:一、Tcpdump 用法详解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)