有时也许想看一下某个网卡上都有哪些数据包,尤其是当你初步判定服务器上有流量攻击时,使用抓包工具来抓取数据包就可以知道有哪些IP在攻击了。
tcpdump工具
具体用法如下:
# tcpdump -nn -i ens33
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
09:41:46.647812 IP 192.168.72.128.22 > 192.168.72.1.52219: Flags [P.], seq 3649233742:3649233954, ack 443629343, win 251, length 212
09:41:46.647976 IP 192.168.72.1.52219 > 192.168.72.128.22: Flags [.], ack 212, win 253, length 0
09:41:46.648337 IP 192.168.72.128.22 > 192.168.72.1.52219: Flags [P.], seq 212:504, ack 1, win 251, length 292
09:41:46.648493 IP 192.168.72.128.22 > 192.168.72.1.52219: Flags [P.], seq 504:668, ack 1, win 251, length 164
09:41:46.648562 IP 192.168.72.1.52219 > 192.168.72.128.22: Flags [.], ack 668, win 252, length 0
09:41:46.648651 IP 192.168.72.128.22 > 192.168.72.1.52219: Flags [P.], seq 668:928, ack 1, win 251, length 260
09:41:46.648744 IP 192.168.72.128.22 > 192.168.72.1.52219: Flags [P.], seq 928:1092, ack 1, win 251, length 164
09:41:46.648800 IP 192.168.72.1.52219 > 192.168.72.128.22: Flags [.], ack 1092, win 256, length 0
09:41:46.648875 IP 192.168.72.128.22 > 192.168.72.1.52219: Flags [P.], seq 1092:1368, ack 1, win 251, length 276
09:41:46.648978 IP 192.168.72.128.22 > 192.168.72.1.52219: Flags [P.], seq 1368:1532, ack 1, win 251, length 164
09:41:46.649035 IP 192.168.72.1.52219 > 192.168.72.128.22: Flags [.], ack 1532, win 254, length 0
09:41:46.649128 IP 192.168.72.128.22 > 192.168.72.1.52219: Flags [P.], seq 1532:1808, ack 1, win 251, length 276
09:41:46.649206 IP 192.168.72.128.22 > 192.168.72.1.52219: Flags [P.], seq 1808:1972, ack 1, win 251, length 164
09:41:46.649297 IP 192.168.72.1.52219 > 192.168.72.128.22: Flags [.], ack 1972, win 253, length 0
09:41:46.649433 IP 192.168.72.128.22 > 192.168.72.1.52219: Flags [P.], seq 1972:2248, ack 1, win 251, length 276
09:41:46.649531 IP 192.168.72.128.22 > 192.168.72.1.52219: Flags [P.], seq 2248:2412, ack 1, win 251, length 164
09:41:46.649591 IP 192.168.72.1.52219 > 192.168.72.128.22: Flags [.], ack 2412, win 251, length 0
09:41:46.649675 IP 192.168.72.128.22 > 192.168.72.1.52219: Flags [P.], seq 2412:2688, ack 1, win 251, length 276
09:41:46.649760 IP 192.168.72.128.22 > 192.168.72.1.52219: Flags [P.], seq 2688:2852, ack 1, win 251, length 164
09:41:46.649809 IP 192.168.72.1.52219 > 192.168.72.128.22: Flags [.], ack 2852, win 256, length 0
回车后会出现密密麻麻的一堆字符串,在按Ctrl+C之前,这些字符串一直在刷屏,刷屏越快说明网卡上的数据包越多。如果没有tcpdump命令,需要使用如下命令安装:
# dnf install -y tcpdump
上例中,我们只需要关注第3列和第4列,它们显示的信息为哪一个IP+端口号在连接哪一个IP+端口号。后面的信息是该数据包的相关信息,如果不懂也没有关系。
其中-i选项后面跟设备名称,如果想抓取其他网卡的数据包,后面则要跟其他网卡的名字。-nn选项的作用是让第3列和第4列显示成“IP+端口号”的形式,如果不加-nn选项则显示 “主机名+服务名称”。
阿铭在shell脚本中也经常会用到tcpdump工具。你可能会问,shell脚本是自动执行的,那我们如何按快捷键Ctrl+C结束抓包呢?tcpdump还有其他的选项可以使用。
# tcpdump -nn -i ens33 -c 100
上例中,-c的作用是指定抓包数量,抓够了自动退出,不用我们人为取消。阿铭再给大家列几个常用的示例:
- 只抓22端口的包
# tcpdump -nn -i ens33 port 22
- 指定抓tcp的包,但是不要22端口的
# tcpdump –nn –i ens33 tcp and not port 22
- 只抓22和53端口的包
# tcpdump –nn –i ens33 port 22 and port 53
wireshark工具
也许你在Windows下使用过wireshark这个抓包工具,它的功能非常强大。在Linux平台我们同样也可以使用它,只不过是以命令行的形式。wireshark的具体选项阿铭不再详细介绍,在日常工作中,tcpdump其实就已经够我们使用了。下面的用法是阿铭在工作中使用比较多的,希望你能掌握这些用法。
# 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"
我们要执行的命令是tshark,你的Linux默认是没有这个命令的,请使用如下命令安装:
# dnf install -y wireshark
然后再看看上面的抓包命令tshark,这条命令用于Web服务器,可以显示如下信息:
Jun 26, 2022 09:11:44.017592529 CST" 116.179.32.105 ask.apelearn.com
GET /question/96924473532
这类似于Web访问日志。若服务器没有配置访问日志,可以临时使用该命令查看一下当前服务器上的Web请求。在这里要注意的是,如果你的机器上没有开启Web服务,是不会显示任何内容的。
# tshark -n -i eth1 -R 'mysql.query' -T fields -e "ip.src" -e "mysql.query"
上面的命令会抓取eth1网卡mysql的查询都有哪些,不过这种方法仅仅适用于mysql的端口为3306的情况,如果不是3306,请使用下面的方法:
# tshark -i eth1 port 3307 -d tcp.port==3307,mysql -z "proto,colinfo,mysql.query,mysql.query"