有时也许想看一下某个网卡上都有哪些数据包,尤其是当你初步判定服务器上有流量攻击时,使用抓包工具来抓取数据包就可以知道有哪些 IP 在攻击了。
tcpdump 工具
[root@evan-01 ~]# tcpdump
-bash: tcpdump: command not found
[root@evan-01 ~]# yum install -y tcpdump
ifconfig 查看网卡信息
[root@evan-01 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.94.128 netmask 255.255.255.0 broadcast 192.168.94.255
inet6 fe80::dc8f:bbc8:e3f6:6009 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:ef:0d:47 txqueuelen 1000 (Ethernet)
RX packets 103 bytes 9412 (9.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 83 bytes 9883 (9.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 40 bytes 3128 (3.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 40 bytes 3128 (3.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@evan-01 ~]#
[root@evan-01 ~]# tcpdump -nn -i ens33
回车后会出现密密麻麻的一对字符串,在按 Ctrl+c 之前,这些字符串一直在刷屏,刷屏越快说明网卡上的数据包越多。我们只需要关注第3列和第4列,他们显示的信息为哪一个 IP+端口号在连接哪一个IP+端口号。后面的信息是该数据包的相关信息。
-i 选项后面跟设备名称,如果想抓取其他网卡的数据包,后面则要跟其他网卡的名字。
-nn 选项的作用是让第3列和第4列显示成“IP+端口号”的形式,如果不加 -nn 选项则显示 “主机名+服务名称”
指定端口抓包
指定抓端口 22 的包
[root@evan-01 ~]# tcpdump -nn -i ens33 port 22
指定不抓端口 22 的包
[root@evan-01 ~]# tcpdump -nn -i ens33 not port 22
指定抓不带 22 端口的,host 为 192.168.94.128的包
[root@evan-01 ~]# tcpdump -nn -i ens33 not port 22 and host 192.168.94.128
指定抓包数量,抓够了自动退出
[root@evan-01 ~]# tcpdump -nn -i ens33 -c 20
指定抓包数量,抓够了存起来
[root@evan-01 ~]# tcpdump -nn -i ens33 -c 20 -w /tmp/bag.txt
tcpdump: listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
20 packets captured
20 packets received by filter
0 packets dropped by kernel
[root@evan-01 ~]# #
查看保存的文件信息
[root@evan-01 ~]# file /tmp/bag.txt
/tmp/bag.txt: tcpdump capture file (little-endian) - version 2.4 (Ethernet, capture length 262144)
[root@evan-01 ~]#
不能 cat 会乱码的
[root@evan-01 ~]# cat /tmp/bag.txt
非要查看的话这么做
[root@evan-01 ~]# tcpdump -r /tmp/bag.txt
reading from file /tmp/bag.txt, link-type EN10MB (Ethernet)
17:20:10.435887 IP evan-01.ssh > 192.168.94.1.51017: Flags [P.], seq 1497515368:1497515500, ack 3398625503, win 255, length 132
17:20:10.436008 IP 192.168.94.1.51017 > evan-01.ssh: Flags [.], ack 132, win 8211, length 0
17:20:15.438980 ARP, Request who-has 192.168.94.1 tell evan-01, length 28
17:20:15.439271 ARP, Reply 192.168.94.1 is-at 00:50:56:c0:00:08 (oui Unknown), length 46
17:20:56.427613 IP 192.168.94.1.mdns > 224.0.0.251.mdns: 0 A (QM)? wpad.local. (28)
17:20:56.428243 IP6 fe80::88e9:9626:f187:f24d.mdns > ff02::fb.mdns: 0 A (QM)? wpad.local. (28)
17:20:56.428844 IP 192.168.94.1.mdns > 224.0.0.251.mdns: 0 AAAA (QM)? wpad.local. (28)
17:20:56.429097 IP6 fe80::88e9:9626:f187:f24d.mdns > ff02::fb.mdns: 0 AAAA (QM)? wpad.local. (28)
17:20:56.841162 IP6 fe80::88e9:9626:f187:f24d.65285 > ff02::1:3.hostmon: UDP, length 22
17:20:56.841224 IP6 fe80::88e9:9626:f187:f24d.52343 > ff02::1:3.hostmon: UDP, length 22
17:20:56.841234 IP 192.168.94.1.52343 > 224.0.0.252.hostmon: UDP, length 22
17:20:56.841258 IP 192.168.94.1.65285 > 224.0.0.252.hostmon: UDP, length 22
17:20:56.922097 ARP, Request who-has gateway tell 192.168.94.1, length 46
17:20:57.427739 IP 192.168.94.1.mdns > 224.0.0.251.mdns: 0 A (QM)? wpad.local. (28)
17:20:57.428051 IP6 fe80::88e9:9626:f187:f24d.mdns > ff02::fb.mdns: 0 A (QM)? wpad.local. (28)
17:20:57.429628 IP 192.168.94.1.mdns > 224.0.0.251.mdns: 0 AAAA (QM)? wpad.local. (28)
17:20:57.430054 IP6 fe80::88e9:9626:f187:f24d.mdns > ff02::fb.mdns: 0 AAAA (QM)? wpad.local. (28)
17:20:57.927551 ARP, Request who-has gateway tell 192.168.94.1, length 46
17:20:58.922416 ARP, Request who-has gateway tell 192.168.94.1, length 46
17:20:59.922613 ARP, Request who-has gateway tell 192.168.94.1, length 46
[root@evan-01 ~]#
wireshark 工具
也许你在 windows 下使用过 wireshark 这个抓包工具,它的功能非常强大。在 linux 平台我们同样也可以使用它,只不过是以命令行的形式。 wireshark 的具体选项不再介绍,在日常生活中 tcpdump 其实就够我们使用了。下面的用法是在工作中用的比较多的
[root@evan-01 ~]# tshark
-bash: tshark: command not found
[root@evan-01 ~]# yum install -y wireshark
tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri"
这条命令是用于 web 服务器,虚拟机没有什么效果