网络检查工具

By | 2021年12月31日

netshoot

这是一个用于容器诊断的瑞士军刀,安装了常用网络工具,如 tcpdump、netstat等。

# 使用主机网络,对主机网络上的 docker虚拟网桥 使用 tcpdump 端口,查看是否有流量经过
docker run -it --rm --net host nicolaka/netshoot bash -c 'tcpdump -i docker_gwbridge udp port 514 -vv -X'

# 使用主机网络,列出正在监听的IP和端口
docker run -it --rm --net host nicolaka/netshoot bash -c 'netstat -ltpn

tcpdump

案例

# 查看发往 ens192 网卡、且udp端口为 514 的数据
tcpdump -i ens192 udp port 514
tcpdump -i ens192 udp port 514 -vv -X

# 过滤找含有 ASA 的数据
tcpdump -i ens192 udp and port 514 -vv -X | grep ASA

# -X 参数:把协议头和内容显示出来,会以ASCII和16进制的形式显示(16进制实际是编码的二进制数据,编码可以是UTF-8、GBK等)
# -w 参数:后面跟文件路径,表示将结果写到文档里,控制台会打印总数量
# -vv 参数:输出详细的报文信息
# -i 参数:指定监听的网络接口
tcpdump -i ens192 udp port 514 -vv -X -w /home/demo.txt 
tcpdump -i ens192 udp and host 192.168.1.157 and port 514 -vv -X -w demo.txt
tcpdump -i ens192 udp and host 192.168.1.157 and port 514 -vv -X > mysyslog.txt

如果 CentOS7 上装了 Logstash 接收数据,记得关闭防火墙 firewalld 或放通 514 端口,否则数据会收不到!

模拟发送和接收 GBK、UTF-8 编码的数据

模拟发送一条 UDP 的 GBK 数据,这里我用的是 XShell(SSH 客户端)。
修改方式如下,选择一个会话并打开属性对话框:

将”终端”里的UTF-8默认编码改成GBK:

用此GBK会话连到跳板机 192.168.2.192 ,连上去后向服务器 192.168.3.220 发送 GBK 数据:

# 使用 nc 命令向地址为 192.168.3.220 的 514 端口上发送一条带有中文的 UDP 消息
echo "思科ASA" | nc -4u  192.168.3.220 514

服务器 192.168.3.220 收到数据:

从上图可以看到,Ascii 区域对于中文是用”…”这种表示的,并不会出现 “\\xB7\\xFE\\xCE” 这种十六进制的。在左侧区域才会显示编码的十六进制数据,具体是用什么编码的可以使用在线工具检测下,这样的工具似乎不多,我这里推荐这个:the-x ,它可以自动识别十六进制字符串是用的什么编码,并转换成中文,如图:

另外,如果我们想模拟发送 UTF-8的中文数据,改下XShell会话的编码就可以了,如图:

nc 命令

yum install nc

# 检查 1194 的 udp 端口是否开放
nc -vuz 185.255.130.172 1194

# 向 192.168.3.220 的 514 端口上发送一条带有中文的 UDP 消息
# -4 参数:只使用IPv4
# -u 参数:使用UDP替代默认的TCP
echo "思科ASA" | nc -4u  192.168.3.220 514

# 模拟发送一条天融信的Syslog(UDP)策略命中日志到 192.168.3.220 的 514 端口上
echo "id=tos time=\"2020-06-11 11:59:29\" fw=NLP-2F-TG4324-1  pri=6 type=ac  recorder=FW-NAT src=192.168.1.85 dst=192.168.1.255 sport=54915 dport=54915 smac=9c:b6:d0:c2:35:cd dmac=ff:ff:ff:ff:ff:ff proto=udp indev=null outdev=null user= rule=accept connid=295682 parentid=0 dpiid=0 natid=0 policyid=9645 msg=\"null\"\r\n" | nc -4u  192.168.3.220 514

nethogs

流量监控工具,特点是实时监控每个进程的带宽占用情况。

# 每隔5秒刷一次
nethogs -d 5

前段时间发现阿里云ECS服务器流量费用大增,阿里云收的是出方向的流量费用,用 nethogs 通过进程排查,看 SENT 字段值:

PROGRAM 列是进程名,有时候直接显示进程名字,多数情况是按 172.18.0.2:3306-112.81.49.27:47828 格式显示,左侧的 172.18.0.2:3306 是服务器上的进程,右侧表示此进程正在发送数据到 112.81.49.27,若左侧进程IP是公网卡上的IP(可通过 ip addr 查看),那么说明是通过公网出去的,阿里云会收取费用。

如果想具体看进程是哪个程序在使用,可以用 netstat -anpt | grep 3306 进一步查看。

hping3

# 安装
apt-get install hping3

# 端口扫描,其中-I eth0指定使用eth0端口,-S指定TCP包的标志位SYN,-p 80指定探测的目的端口。
# TCP包的标志位解释:SYN-创建一个连接、FIN-终结一个连接、ACK-确认接收到的数据。
hping3 -I eth0  -S 192.168.10.1 -p 80

参考:https://wangchujiang.com/linux-command/c/hping3.html

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注