
你好,我使用的是ubuntu 1404(虚拟机),可以打开终端输入tcpdump命令抓包。我经常使用的命令是tcpdump -i eth0 -w webpcap。i参数表示网卡,w参数表示将抓包结果保存到pcap文件中,这样接下来可以使用wireshark查看。如果还想明白别的参数的意义的话,可以输入tcpdump -h,就显示帮助信息了。还有,要使用tcpdump,最好切换到root用户(sudo命令)。
再复制一部分别的的用法,也可以自己再搜索一下:
-A 以ASCII码方式显示每一个数据包(不会显示数据包中链路层头部信息) 在抓取包含网页数据的数据包时, 可方便查看数据(nt: 即Handy for capturing web pages)
-c count
tcpdump将在接受到count个数据包后退出
-C file-size (nt: 此选项用于配合-w file 选项使用)
该选项使得tcpdump 在把原始数据包直接保存到文件中之前, 检查此文件大小是否超过file-size 如果超过了, 将关闭此文件,另创一个文件继续用于原始数据包的记录 新创建的文件名与-w 选项指定的文件名一致, 但文件名后多了一个数字该数字会从1开始随着新创建文件的增多而增加 file-size的单位是百万字节(nt: 这里指1,000,000个字节,并非1,048,576个字节, 后者是以1024字节为1k, 1024k字节为1M计算所得, 即1M=1024 * 1024 = 1,048,576)
-d 以容易阅读的形式,在标准输出上打印出编排过的包匹配码, 随后tcpdump停止(nt | rt: human readable, 容易阅读的,通常是指以ascii码来打印一些信息 compiled, 编排过的 packet-matching code, 包匹配码,含义未知, 需补充)
-dd 以C语言的形式打印出包匹配码
-ddd 以十进制数的形式打印出包匹配码(会在包匹配码之前有一个附加的'count'前缀)
-D 打印系统中所有tcpdump可以在其上进行抓包的网络接口 每一个接口会打印出数字编号, 相应的接口名字, 以及可能的一个网络接口描述 其中网络接口名字和数字编号可以用在tcpdump 的-i flag 选项(nt: 把名字或数字代替flag), 来指定要在其上抓包的网络接口
此选项在不支持接口列表命令的系统上很有用(nt: 比如, Windows 系统, 或缺乏 ifconfig -a 的UNIX系统); 接口的数字编号在windows 2000 或其后的系统中很有用, 因为这些系统上的接口名字比较复杂, 而不易使用
如果tcpdump编译时所依赖的libpcap库太老,-D 选项不会被支持, 因为其中缺乏 pcap_findalldevs()函数
-e 每行的打印输出中将包括数据包的数据链路层头部信息
tcpdump是一个用于截取网络分组,并输出分组内容的工具。
凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具。
tcpdump 支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
时间戳 协议 源地址 源端口 > 目的地址 目的端口 网络包详细信息
为了帮你更快上手 tcpdump 的使用,我在这里也帮你整理了一些最常见的用法,并且绘制成了表格,你可以参考使用。
首先,来看一下常用的几个选项。在上面的 ping 案例中,我们用过 -nn 选项,表示不用对 IP 地址和端口号进行名称解析。
我们再来看常用的过滤表达式。刚刚用过的是 udp port 53 or host 3519027188 ,表示抓取 DNS 协议的请求和响应包,以及源地址或目的地址为 3519027188 的包。
什么是 PCAP 文件扩展名?
>
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
>
上篇分析了LengthFieldBasedFrameDecoder,只需要简单灵活的指定几个参数就能满足多种情况下的拆包处理,将服务端接收到的二进制流基于长度前缀法解析为一个个的ByteBuf消息体。
但是请设想一下异常的情况:如果网络传输过程中出现丢帧或者长度域中某个位在模数转换时出现了意外没有得到正确转换,是否意味着所有的消息体都无法再得到正确的解析了呢?本篇我们就来聊聊TCP协议的可靠性保证。
温故知新,首先我们回忆一下TCP报文结构:
16 位源端口号和 16 位目的端口号:端口号通常也称为进程地址。网络中的两个终端通信,说到底其实是两个终端上的各自的进程在通信,通过端口号才能区分响应的数据包来自远端的哪一个,以及需要发送到本机的哪个进程来处理。
32 位序号:序号用来标识从 TCP 发送端向 TCP 接收端发送的数据字节流。
32 位确认序列号:表示一个准备接收包的序列号。
4 位首部长度:首部长度指出了首部中 32 bit 字的数目,正常的 TCP 首部长度是 20 字节。
6 个标志字段:URG 紧急指针;ACK 确认序号;PSH 推标志;RST 重建连接;SYN 同步序号;
FIN 结束标志。
16 位窗口:TCP 的流量控制由连接的每一端通过声明的滑动窗口大小来提供,窗口大小为字节数。
16 位检验和:检验和字段覆盖了 TCP 首部和 TCP 数据。TCP 检验和的计算方法和 UDP 检验和的
计算方法一样,计算时需要考虑伪报头。
16 位紧急指针:URG 标志置 1 时紧急指针才有效。
可以看出TCP通过多种方式来保证消息的可靠性:
1、检验和:保证接收到字节流未出现模数转换异常
2、序号和确认序列号:发送方对每个字节进行编号,接收方对接收的数据包进行序号确认,超时后发送方会重发。
3、滑动窗口大小:通过设置滑动窗口大小表示自身socket缓冲区的大小,防止缓冲区满后发送方仍然不停发数据导致的丢包。
tcpdump是一款强大的命令,通过tcpdump可以很方便的排查出网络连接中的一些故障问题。下面是我在本机和es服务通信的一段抓包信息:
本次tcpdump抓包过滤规则:
ip为192168177,tcp协议,端口为5601的前100个数据包。
可以清晰的看到,es服务在接收到请求数据包后,连续发送了5个数据包,分别为:
seq 1:274, ack 416, win 190, length 273
seq 274:3194, ack 416, win 190, length 2920
seq 3194:6114, ack 416, win 190, length 2920
seq 6114:9034, ack 416, win 190, length 2920
seq 9034:11954, ack 416, win 190, length 2920
而接收方在接收到数据包后依次发送了确认包:
ack 3194, win 256, length 0
ack 6114, win 256, length 0
ack 9034, win 256, length 0
ack 11954, win 256, length 0
可以看到接收方并不需要对每一个数据包进行确认,ack 3194代表接收方对3194之前的数据包都进行了确认。
嗯,至此算是对本篇开头的疑问进行了解答。
来自
参考资料:
《网络协议分析及应用实验教程》
以上就是关于组播v3 怎么tcpdump抓包全部的内容,包括:组播v3 怎么tcpdump抓包、【性能】怎么使用 tcpdump 抓包分析、tcpdump 命令的常用选项:一等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)