tcpdump 用法总结

 最近这几天写了一个解析pcap文件的程序。功能就是把pcap文件里面不同的会话分开,存为一些小的pcap文件,然后再提取里面的负载。然后想在上面拓展一下,比如直接监听本机的端口,将得到的数据动态解析为pcap文件,提取负载等。然后发现了一个在lunix可以捕获数据包的工具–tcpdump。这个工具十分强大,所以就顺便学习了一些用法,如下:

首先我们看一个十分简单的命令

sudo tcpdump  # 需要在root权限下运行

 然后你就会发现你电脑正在传输的各种报文了,然而它的牛逼之处在于它的选项以及过滤的能力。首先谈谈tcpdump的一些常用的参数选项。首先我们的电脑都有几个网卡,这些可以通过ifconfig来查看,然后如果你想监听某个特定的网卡怎么办,于是有了一个 -i的参数

sudo tcpdump -i wlp8s0

一般显示三个,一个是有线网卡,一个是本地环回(就是localhost),一个是无线网卡(本文捕获的数据全都是无线网卡的)。


 假设我们想捕获特定个数的数据包怎么办,这时候就要用到 -c 参数了。

sudo tcpdump -i wlp8s0 -c 10

这个就是说我想捕获10条数据包。

我们看一下报文的头部输出是什么(数据部分仅展示第一条)

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on wlp8s0, link-type EN10MB (Ethernet), capture size 262144 bytes

16:51:25.454828 ARP, Request who-has 10.11.178.55 tell 10.11.178.55,length 28
......

第一个是建议可以用 -v -vv 来查看详细的协议的编码信息,主要就是数据部分的信息。第二个就是以太网的链路层信息,第三行就是具体捕获的数据包。但是内容很简略,如果想要详细一点的怎么办?第一个可以使用 -v 得到的信息格式如下:

tcpdump: listening on wlp8s0, link-type EN10MB (Ethernet), capture size 262144 bytes

16:59:39.967212 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 10.12.113.254 tell 10.12.113.193, length 28

16:59:39.971915 IP (tos 0x0, ttl 64, id 6011, offset 0, flags [DF], proto UDP (17), length 72)
10.11.177.216.52914 > dns.hust.edu.cn.domain: [udp sum ok] 29723+ PTR? 254.113.12.10.in-addr.arpa. (44)

这样把ttl等各种信息都展示出来了,然有一个参数可以改为展示以太网头部的帧信息。那就是 -e

sudo tcpdump -c 10 -e

展示效果如下:

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on wlp8s0, link-type EN10MB (Ethernet), capture size 262144 bytes

16:59:53.228185 b0:e2:35:2f:d0:6a (oui Unknown) > Broadcast, ethertype ARP (0x0806), length 42: Request who-has 10.12.113.254 tell 10.12.113.193, length 28

这样可以看到这是一个广播(Broadcast)的信息。


接下来的这个参数很重要了,目的就是把捕获的数据包原封不动的写到一个pcap文件里面去,这样你可以用wireshark等工具可以直接查看(当然你也可以直接使用wireshark捕获)。这两个参数就是 -r(从文件里面读取) -w(保存到文件中),比如如下命令:

sudo tcpdump -c 10 -w data

然后就可以发现data文件里面10个数据包了。


前面讲的都是一些选项,假设我对数据包有要求怎么办,比如我只想要TCP报文,不想要UDP报文。这就是所谓的过滤参数了,

sudo tcpdump "tcp"

这样就会一直读取TCP报文写到data,直到你按下 ctrl+c

tcpdump 支持的协议类型有

假设我对端口有要求呢? 比如可以使用 “port 80” 来指定捕获HTTP报文
还有一些参数如下(都放在双引号里面即可):

1 host:指定主机名或IP地址,例如’host baidu.com’或’host 111.111.111.111′
2 net :指定网络段,例如’arp net 128.3’或’dst net 128.3′
3 portrange:指定端口区域,例如’src or dst portrange 6000-6008′

还有很多复杂的参数和过滤条件可以使用 man tcpdumpman pcap-filter 查看。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值