经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Linux/Shell » 查看文章
在linux中使用tcpdump抓包的方法:
来源:cnblogs  作者:xutopia  时间:2021/12/31 8:51:01  对本文有异议

在linux中使用tcpdump抓包的方法:

1,运行下面命令来从所有网卡中捕获数据包:

tcpdump -i any

2,从指定网卡中捕获数据包

tcpdump -i eth0

3,指定网卡,IP地址,写入文件

tcpdump -i eth0 host 10.19.150.242 -w ./datdump.cap

4,指定网卡,源ip 且 目的ip,写入文件

tcpdump -i eth0 src host 10.10.100.19 and dst host 10.10.100.153 -w ./datdump1.cap

5,指定网卡,源ip 或 目的ip,写入文件

tcpdump -i eth0 src host 10.10.100.19 or dst host 10.10.100.153 -w ./datdump1.cap

6,指定网卡,tcp端口 且 源ip 且 目的ip,写入文件

tcpdump -i eth0 tcp port 52312 and src host 10.10.100.19 and dst host 10.10.100.153 -w ./datdump3.cap

7,指定网卡,tcp端口 且 源ip 且 目的ip,写入文件

tcpdump -i eth0 host ! 10.10.100.19 and ! 10.10.100.153 -w ./datdump4.cap

8,只抓取sync的数据包 具体什么意思,详见

tcpdump -i eth0 tcp[13] == 2 -w ./datdump5.cap

9,只抓取HTTP包

tcpdump -i eth0 'tcp[(tcp[12]>>2):4] = 0x48545450' -w ./datdump5.cap

10,只抓取ip数据帧中没有数据的包,详见

tcpdump -i eth0 '((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0' -w ./datdump6.cap

tcpdump [ 选项 ] [ -c 数量 ] [ -i 网络接口 ] [ -w 文件名 ] [ 表达式 ]

  1. man tcpdump
  2. tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ]
  3. ? [ -c count ]
  4. ? [ -C file_size ] [ -G rotate_seconds ] [ -F file ]
  5. ? [ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]
  6. ? [ --number ] [ -Q in|out|inout ]
  7. ? [ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ]
  8. ? [ -W filecount ]
  9. ? [ -E spi@ipaddr algo:secret,... ]
  10. ? [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
  11. ? [ --time-stamp-precision=tstamp_precision ]
  12. ? [ --immediate-mode ] [ --version ]
  13. ? [ expression ]
  14. 选项翻译如下:
  15. -l:使标准输出变为缓冲行形式;
  16. -c:抓包次数;
  17. -nn:直接以 IP Port Number 显示,而非主机名与服务名称;
  18. -s :<数据包大小> 设置每个数据包的大小;
  19. -i:指定监听的网络接口;
  20. -r:从指定的文件中读取包;
  21. -w:输出信息保存到指定文件;
  22. -a:将网络地址和广播地址转变成名字;
  23. -d:将匹配信息包的代码以人们能够理解的汇编格式给出;
  24. -e:在输出行打印出数据链路层的头部信息;
  25. -f:将外部的Internet地址以数字的形式打印出来;
  26. -t:在输出的每一行不打印时间戳;
  27. -v :输出稍微详细的报文信息;--vv则输出更详细信息。

抓取带有特殊标记的数据包

https://www.jb51.net/LINUXjishu/118388.html?pc

示例:抓取只包含SYN位的数据包

1.客户端发送SYN

2.服务端回应SYN和ACK

3.客户端发送ACK

现在我们仅捕获包含SYN位的数据包。 注意,不希望步骤2(SYN-ACK)的数据包,只是一个普通的初始SYN。

tcp头的结构

TCP头包含20个字节固定长度的数据(上图中的前4行),而控制位位于第13个字节(字节计算从0开始)

只看我们感兴趣的控制位:

这些是我们感兴趣的TCP控制位。我们对这个八位组中的位进行了编号,从0到7,从右到左,所以PSH位是位编号3,而URG位是编号5,SYN位是2。

如果只包含 SYN 位,那就是 tcp头的第13个字节(0开始)的值为2,即tcp[13] == 2。

tcpdump -i eth0 tcp[13] == 2 -w ./datdump5.cap

如果抓取包含SYN位的数据包

tcpdump -i eth0 'tcp[13] & 2 == 2' -w ./datdump5.cap

示例:只抓取ip数据包没有数据的包

tcpdump -i eth0 '((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) == 0' -w ./datdump6.cap

ip[2:2]

表示整个ip数据包总长度,即ip头的第2个字节(0开始)开始的两个字节(2,3)的值。

(ip[0]&0xf)<<2

ip头的第0个字节取低4位,然后左移两位(乘4),即ip头的长度。乘4的原因是首部长度表示有多少个32位的数据。

(tcp[12]&0xf0)>>2)

表示tcp头的长度。

示例:只抓取http数据包

tcpdump -i eth0 'tcp[(tcp[12]>>2):4] = 0x47455420' -w ./datdump5.cap

tcp[(tcp[12]>>2):4] 表示tcp头部之后的4个字节的值,0x47455420 就是HTTP的16进制。

原文链接:http://www.cnblogs.com/xutopia/p/15738423.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号