谷动谷力

标题: 【openwrt】Linux系统 tcpdump 抓包命令使用教程 [打印本页]

作者: sunsili    时间: 2023-3-29 21:42
标题: 【openwrt】Linux系统 tcpdump 抓包命令使用教程
【openwrt】Linux系统 tcpdump 抓包命令使用教程



tcpdump简介

tcpdump 是Linux系统下的一个强大的命令,可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。

本教程对tcpdump命令使用进行讲解说明,通过本教程您可以学会linux系统下使用tcpdump命令进行网络抓包,实现对数据包进行捕获分析。

查看系统是否安装 tcpdump

直接输入tcpdump命令运行
root@OMJ:~# tcpdump
-ash: tcpdump: not found

更新opkg

确保openwrt硬件已连接网络
root@OMJ:~# opkg update
Downloading http://downloads.openwrt.org/cha ... s/base/Packages.gz.
Updated list of available packages in /var/opkg-lists/chaos_calmer_base.
Downloading http://downloads.openwrt.org/cha ... /base/Packages.sig.
Signature check passed.
Downloading http://downloads.openwrt.org/cha ... s/luci/Packages.gz.
Updated list of available packages in /var/opkg-lists/chaos_calmer_luci.
Downloading http://downloads.openwrt.org/cha ... /luci/Packages.sig.
Signature check passed.
Downloading http://downloads.openwrt.org/cha ... gement/Packages.gz.
Updated list of available packages in /var/opkg-lists/chaos_calmer_management.
Downloading http://downloads.openwrt.org/cha ... ement/Packages.sig.
Signature check passed.
Downloading http://downloads.openwrt.org/cha ... ckages/Packages.gz.
Updated list of available packages in /var/opkg-lists/chaos_calmer_packages.
Downloading http://downloads.openwrt.org/cha ... kages/Packages.sig.
Signature check passed.
Downloading http://downloads.openwrt.org/cha ... outing/Packages.gz.
Updated list of available packages in /var/opkg-lists/chaos_calmer_routing.
Downloading http://downloads.openwrt.org/cha ... uting/Packages.sig.
Signature check passed.
Downloading http://downloads.openwrt.org/cha ... ephony/Packages.gz.
Updated list of available packages in /var/opkg-lists/chaos_calmer_telephony.
Downloading http://downloads.openwrt.org/cha ... phony/Packages.sig.
Signature check passed.

安装tcmdump

root@OMJ:~# opkg install tcpdump
Installing tcpdump (4.5.1-4) to root...
Downloading http://downloads.openwrt.org/cha ... 4_ramips_24kec.ipk.
Installing libpcap (1.5.3-1) to root...
Downloading http://downloads.openwrt.org/cha ... 1_ramips_24kec.ipk.
Configuring libpcap.
Configuring tcpdump.


tcpdump 命令格式介绍
首先我们对Linux系统下tcpdump命令格式进行一个介绍说明,在下面的使用教程中讲到tcpdump命令示例时,您就可以参考tcpdump命令参数说明进行学习。

查看帮助tcpdump --help
root@OMJ:~# tcpdump -h
tcpdump version 4.5.1
libpcap version 1.5.3
Usage:
tcpdump [-aAbdDefhHIJKlLnNOpqRStuUvxX] [ -B size ] [ -c count ]
               [ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
               [ -i interface ] [ -j tstamptype ] [ -M secret ]
               [ -P in|out|inout ]
               [ -r file ] [ -s snaplen ] [ -T type ] [ -V file ] [ -w file ]
               [ -W filecount ] [ -y datalinktype ] [ -z command ]
                [ -Z user ] [ expression ]
会显示版本及参数信息, 下面详细讲解一下参数意义:

tcpdump 命令使用示例


linux系统下执行tcpdump命令需要root账号或者具备sudo权限的账号,否则执行tcpdump命令说,系统会提示tcpdump: no suitable device found。
在下面的例子中,-i eth0 参数表示只抓取 eth0 接口数据包,不加-i eth0 是表示抓取所有的接口包括 lo。

01、抓取所有网络包,并在terminal中显示抓取的结果,将包以十六进制的形式显示。
tcpdump
02、抓取所有的网络包,并存到 result.cap 文件中。
tcpdump -w result.cap

03、抓取所有的经过eth0网卡的网络包,并存到result.cap 文件中。
tcpdump -i eth0 -w result.cap

04、抓取源地址是192.168.1.100的包,并将结果保存到 result.cap 文件中。
tcpdump src host 192.168.1.100 -w result.cap

05、抓取地址包含是192.168.1.100的包,并将结果保存到 result.cap 文件中。
tcpdump host 192.168.1.100 -w result.cap

06、抓取目的地址包含是192.168.1.100的包,并将结果保存到 result.cap 文件中。
tcpdump dest host 192.168.1.100 -w result.cap

07、抓取主机地址为 192.168.1.100 的数据包
tcpdump -i eth0 -vnn host 192.168.1.100

08、抓取包含192.168.1.0/24网段的数据包
tcpdump -i eth0 -vnn net 192.168.1.0/24

09、抓取网卡eth0上所有包含端口22的数据包
tcpdump -i eth0 -vnn port 22

10、抓取指定协议格式的数据包,协议格式可以是「udp,icmp,arp,ip」中的任何一种,例如以下命令:
tcpdump udp  -i eth0 -vnn

11、抓取经过 eth0 网卡的源 ip 是 192.168.1.100 数据包,src参数表示源。
tcpdump -i eth0 -vnn src host 192.168.1.100

12、抓取经过 eth0 网卡目的 ip 是 192.168.1.100 数据包,dst参数表示目的。
tcpdump -i eth0 -vnn dst host 192.168.1.100

13、抓取源端口是22的数据包
tcpdump -i eth0 -vnn src port 22

14、抓取源ip是 192.168.1.100 且目的ip端口是22的数据包
tcpdump -i eth0 -vnn src host 192.168.1.100 and dst port 22

15、抓取源ip``192.168.1.100``22
tcpdump -i eth0 -vnn src host 192.168.1.100 or port 22

16、抓取源ip``192.168.1.100``22
tcpdump -i eth0 -vnn src host 192.168.1.100 and not port 22

17、抓取源ip是192.168.1.100且目的端口是22,或源ip是192.168.1.102且目的端口是80的数据包。
tcpdump -i eth0 -vnn ( src host 192.168.1.100 and dst port 22 ) or ( src host 192.168.1.102 and dst port 80 )

18、把抓取的数据包记录存到/tmp/result文件中,当抓取100个数据包后就退出程序。
tcpdump –i eth0 -vnn -w /tmp/result -c 100

19、从/tmp/result记录中读取tcp协议的数据包
tcpdump -i eth0  tcp  -vnn -r /tmp/result

20、想要截获所有192.168.1.100的主机收到的和发出的所有的数据包:
tcpdump host 192.168.1.100

21、如果想要获取主机192.168.1.100除了和主机192.168.1.101之外所有主机通信的ip包,使用命令:
tcpdump ip host 192.168.1.100 and ! 192.168.1.101

22、如果想要获取主机 192.168.1.100 接收或发出的 telnet 包,使用如下命令:
tcpdump tcp port 23 host 192.168.1.100

写在最后

至此,本Linux系统 tcpdump 抓包命令使用教程已经讲解完,本教程中更多的只是一些简单的示例,如果希望更复杂的抓取,可以参考tcpdump抓包命令命令格式进行学习使用


作者: sunsili    时间: 2023-3-30 20:31
用 tcpdump -D 命令列出可以抓包的网络接口:
root@OMJ:~# tcpdump -D
1.eth0
2.ra0
3.wwan0
4.apcli0
5.br-lan
6.eth0.1
7.any (Pseudo-device that captures on all interfaces)
8.lo

作者: sunsili    时间: 2023-3-30 20:33
本帖最后由 sunsili 于 2023-3-30 20:37 编辑

用如下命令先对 any 接口进行抓包:
tcpdump -i any
太多显示不好看数据
用tcpdump -i anytcpdump -i any -c 5 命令,抓取 5 个数据包后自动停止了抓包。这在有些场景中十分有用 —— 比如你只需要抓取少量的数据包用于分析。当我们需要使用过滤规则抓取特定的数据包(如下所示)时,-c 的作用就十分突出了。
root@OMJ:~# tcpdump -i anytcpdump -i any -c 5
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
20:34:02.683606 IP OMJ.lan.ssh > 192.168.0.139.59743: Flags [P.], seq 868377647:868377699, ack 3321214123, win 4231, length 52
20:34:02.683644 IP OMJ.lan.ssh > 192.168.0.139.59743: Flags [P.], seq 0:52, ack 1, win 4231, length 52
20:34:02.683657 ethertype Unknown, STP > Unknown DSAP 0xce Information, send seq 32, rcv seq 0, Flags [Response], length 88
20:34:02.683920 ethertype IPv4, IP 192.168.0.139.59743 > OMJ.lan.ssh: Flags [.], ack 52, win 4105, length 0
20:34:02.683920 IP 192.168.0.139.59743 > OMJ.lan.ssh: Flags [.], ack 52, win 4105, length 0
5 packets captured
80 packets received by filter
0 packets dropped by kernel

在上面示例中,tcpdump 默认是将 IP 地址和端口号解析为对应的接口名以及服务协议名称。而通常在网络故障排查中,使用 IP 地址和端口号更便于分析问题;用 -n 选项显示 IP 地址,-nn 选项显示端口号:root@OMJ:~# tcpdump -i anytcpdump -i any -c5 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
20:37:03.612688 IP 192.168.0.140.22 > 192.168.0.139.59743: Flags [P.], seq 868378999:868379051, ack 3321214435, win 4231, length 52
20:37:03.612727 IP 192.168.0.140.22 > 192.168.0.139.59743: Flags [P.], seq 0:52, ack 1, win 4231, length 52
20:37:03.612740 ethertype Unknown, Unknown SSAP 0x4c > Unknown DSAP 0xce Information, send seq 32, rcv seq 0, Flags [Response], length 88
20:37:03.613222 IP 192.168.0.140.22 > 192.168.0.139.59743: Flags [P.], seq 52:168, ack 1, win 4231, length 116
20:37:03.613257 IP 192.168.0.140.22 > 192.168.0.139.59743: Flags [P.], seq 52:168, ack 1, win 4231, length 116
5 packets captured
104 packets received by filter
0 packets dropped by kernel






欢迎光临 谷动谷力 (http://bbs.sunsili.com/) Powered by Discuz! X3.2