linux抓捕网络包
jacky. 1650727278@@q.com
tcpdump是linux命令行下常用的的一个抓包工具,记录一下平时常用的方式,测试机器系统是centos 7。
tcpdump的命令格式
tcpdump的参数众多,通过man tcpdump可以查看tcpdump的详细说明,这边只列一些笔者自己常用的参数:
tcpdump [-i 网卡] -nnAX ‘表达式’ 各参数说明如下:
-i:interface 监听的网卡。 -nn:表示以ip和port的方式显示来源主机和目的主机,而不是用主机名和服务。 -A:以ascii的方式显示数据包,抓取web数据时很有用。 -X:数据包将会以16进制和ascii的方式显示。 表达式:表达式有很多种,常见的有:host 主机;port 端口;src host 发包主机;dst host 收包主机。多个条件可以用and、or组合,取反可以使用!,更多的使用可以查看man 7 pcap-filter。 下面进行一些命令测试,如果没有权限,可以先切换成root用户。
监听网卡eth0
$ tcpdump -i eth0 这个方式最简单了,但是用处不多,因为基本上只能看到数据包的信息刷屏,压根看不清,可以使用ctrl c中断退出,如果真有需求,可以将输出内容重定向到一个文件,这样也更方便查看。
监听指定协议的数据
代码语言:javascript复制$ tcpdump -i eth0 -nn 'icmp'
这个是用来监听icmp协议的数据,就是ping命令使用的协议。类似的,如果要监听tcp或者是udp协议,只需要修改上例的icmp就可以了。ping下监听的机器,输出如下:
代码语言:javascript复制[root@localhost ~]# tcpdump -i eth0-nn 'icmp'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eno16777736, link-type EN10MB (Ethernet), capture size 65535 bytes
^C
0 packets captured
0 packets received by filter
0 packets dropped by kernel
[root@localhost ~]#
linux使用tcpdump抓包示例
每一行的各个数据表示的含义:
抓到包的时间 IP 发包的主机和端口 > 接收的主机和端口 数据包内容 监听指定的主机
代码语言:javascript复制$ tcpdump -i eth0 -nn 'host 192.168.1.231'
这样的话,192.168.1.231这台主机接收到的包和发送的包都会被抓取。
代码语言:javascript复制$ tcpdump -i eth0 -nn 'src host 192.168.1.231'
这样只有192.168.1.231这台主机发送的包才会被抓取。
代码语言:javascript复制$ tcpdump -i eth0 -nn 'dst host 192.168.1.231'
这样只有192.168.1.231这台主机接收到的包才会被抓取。
监听udp 指定端口
代码语言:javascript复制[root@localhost ~]# tcpdump -i eth0 udp -nnA 'port 9899'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
19:18:09.444195 IP 192.168.1.46.35408 > 255.255.255.255.9797: UDP, length 16
E..,9.@.@.?I.........P&E....{
"cmd":"peer"}
19:18:09.444988 IP 192.168.1.13.9797 > 192.168.1.46.35408: UDP, length 159
....&E.P...9{
"cmd":"fnpeer", "ip":"192.168.1.13", "sn":"", "mcode":"", "api":"/ip4/127.0.0.1/tcp/5501", "peerid":"TmNKAc9eV912fxxK8Ge5ZXmB8VgxRREwh9c1swnwJaa6zB8", "err":0}
^C
2 packets captured
2 packets received by filter
0 packets dropped by kernel
[root@localhost ~]#
上例是用来监听主机的9797端口收到和发送的所有数据包,结合-A参数,在web开发中,真是非常有用。
监听指定主机和端口
代码语言:javascript复制$ tcpdump -i eth0 -nnA 'port 80 and src host 192.168.1.231'
多个条件可以用and,or连接。上例表示监听192.168.1.231主机通过80端口发送的数据包。
监听除某个端口外的其它端口
代码语言:javascript复制$ tcpdump -i eth0 -nnA '!port 22'
如果需要排除某个端口或者主机,可以使用“!”符号,上例表示监听非22端口的数据包。
email:1650727278@qq.com 画笔
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/183324.html原文链接:https://javaforall.cn