网络

常用工具命令集合

高频工具

名字 简介
ping 检测链路状态
hping 支持 tcp 检测
mtr
dig DNS 解析工具
nslookup DNS 解析工具
dstat 检测网络流量,同时输出系统资源使用情况(综合)
ip 网络管理工具(综合)
ss socket 的统计信息
traceroute 跟踪IP路由包
tcpdump 抓包工具

综合工具

名字 简介
ifconfig 早期的网卡配置工具
iwconfig 无线网卡的配置工具
sar 流量监控(综合)
iftop 类似 top 的方式展示连接和网络传输情况
iperf c/s 模式的网络质量测试工具
iptraf 流量及协议分析工具-实时(iptraf -d eth0)
netperf c/s 模式的网络质量测试工具
nethogs 进程级带宽检查工具
tracert 类似于 tcptrace
nmap 扫描
netcat/socat

特殊工具

名字 简介
telnet 发送tcp数据包
tcptrace tcpdump捕获数据的分析工具
tshark 抓包工具
ethtool 网卡检查和设置(有线网卡)
netstat 网络链接状态查询
nstat 统计网络的状态
lsof 系统资源及文件调度情况
autossh
dnsyo
ifup/ifdouwm
route 路由信息

路由

# linux
ip route add 10.2.2.0/24 via 192.168.5.253 dev br0

# mac
netstat -rn
sudo route add -net 10.2.2.0/24 -netmask 255.255.255.0 192.168.0.181

# win
route print -4
route -p add 10.2.2.0/24 mask 255.255.255.0 192.168.5.182 metric 1 IF 11


# 检查目标链路, 可以通过浏览器打开生成的物理路线图
nexttrace baidu.com

# 查看到远端是否有匹配的路由
ip r get 10.20.4.219

网络流量


watch more /proc/net/dev        # 实时监控流量文件系统 累计值
iptraf
sar -n DEV 1 10

netstat -i

nethogs -d 5 eth0 eth1          # 按进程统计流量

sar -n DEV 1 3  # 统计网络流量和速率

dns

测试

nslookup www.baidu.com               # 解析域名IP
dig -x www.baidu.com                # 解析域名IP
dig +short txt hacker.wp.dg.cx      # 通过 DNS 来读取 Wikipedia 的hacker词条
host -t txt hacker.wp.dg.cx         # 通过 DNS 来读取 Wikipedia 的hacker词条

systemd-dns


# 查看当前配置
resolvectl status

systemd-resolved --flush-caches     # 刷新 dns

systemctl restart nscd.service      # 刷新 dns

综合

ifconfig/flushdns       # windows dns 刷新

# MAC dns 刷新
sudo dscacheutil -flushcache;sudo killall -HUP mDNSResponder

# 指定 dns 服务器进行查询
dig @localhost -p 1053 ecs.server.wait

dig @8.8.8.8 www.baidu.com

# 查看域名的 ttl 时间
dig +nocmd chenwx.top @8.8.8.8 +noall +answer

主机网络检查

ss


# 网络连接的状态统计
ss -s

# 查询 time-wait 状态的连接
ss -tan state time-wait | wc -l

ss -tan state established

ss -t state closed          # 不一定有, 可能是因为已经算在了 time-wait 状态中
ss -to state time-wait      # 显示详细信息, 主要包括处于此状态的时间

# 统计 time-wait 状态的链接地址和数量
ss -tan state time-wait | awk '{print $4}' | cut -d: -f1 | sort | uniq -c | sort -rn

# 统计连接状态
ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}'

# 查看 TCP 连接的保持时长
ss -tno

netstat

el6 / el7

# 协议状态
netstat -s

# 连接数按 IP 地址进行分组统计
netstat -tn | grep ESTABLISHED | awk '{print $5}' | awk -F":" '{print $4}' | sort | uniq -c

# 查看某端口的远程连接 IP 地址分组数
netstat -tn | grep 3306 | awk '{print $5}'  | cut -d ":" -f 4 | sort | uniq -c

# 检查连接该端口的远端 IP 地址分组统计
netstat -tn | grep 21102 | awk '{print $5}' | sort|  cut -d ":" -f 1 | uniq -c

# 计算每个 IP 地址到本机的连接数量
netstat -ant | grep ESTABLISHED | awk '{print $5}' |awk -F':' '{print $(NF-1),$NF}' | sort | uniq -c
netstat -anp |grep 'tcp|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

# 与指定 IP+port 的连接情况
netstat -tnp | grep 10.1.249.51:21102 | awk '{print $NF}' | cut -d '/' -f 1 | sort | uniq -c

# 统计 TCP 连接状态数量
# /^tcp/ {++S[$NF]} 每匹配一个 tcp 行, 就将 $NF 作为 数组 S(k/v)的 key 并 +1
netstat -tn | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

# IP 维度统计 - 与远端的连接数量
netstat -na|grep ESTABLISHED | awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r -n

# IP+PORT 维度统计 - 与远端的连接数量
netstat -ant|fgrep "ESTABLISHED" | awk '{print $5}' | sort |uniq -c

# 因时间戳问题被丢弃的包数量
netstat -s | grep rejects

综合检查

# 检查连接远端某地址的连接数分组统计, 及进程号
lsof -i @10.1.249.51:21102 | awk '{print $2}' | sed 1d | uniq -c

# 查看所有 ESTABLISHED 状态的 tcp 链接
lsof -i TCP -s TCP:ESTABLISHED -n

# 统计连接最多的进程
lsof -i TCP -s TCP:ESTABLISHED | awk '{print $1}' | sort | uniq -c | sort -rn

# 查看指定进程的所有连接
lsof -i -a -p $(pgrep python3)

# 到远端的连接数量
lsof -i @10.1.249.51:21102 | wc -l

dstat                   # 综合检测
sar -n DEV 1 5          # 流量检查

iproute2


ip addr show bond0

# 手动添加IP
ip addr add dev bond0 10.230.99.98/26

# 添加vip后, 主动向外发送广播(如果是 v6 地址则不需要单独宣告)
/sbin/arping -q -c 2 -A 10.230.99.98 -I bond0

网络排查

traceroute www.baidu.com            # 测试跳数
mtr -r www.baidu.com                # 测试网络链路节点响应时间 # trace ping 结合
telnet ip port                      # 测试端口是否开放
echo "show " | nc $ip $port

# 测试端口是否可访问
echo >/dev/tcp/10.2.1.5/111 && echo "open"
echo >/dev/tcp/baidu.com/80 && echo "open"

# 发送UDP数据包
echo "hello" > /dev/udp/192.168.1.81/5060
echo "hello" | socat - udp4-datagram:10.2.1.67:514

# nc
echo "nihao" | nc 10.248.13.4 8716
echo "nihao" | nc -u 10.248.13.4 8716       # udp

nc -v -w 1 192.168.1.222 -z 1-200
nc -v -w 10 -z 10.1.249.62 18080

# 长时间测试
for i in $(seq 100); do sleep 0.5; nc -v -w 10 -z 211.139.91.37 80; done

# 扫描
nmap -p 80 10.1.2.5
nmap -p 8081 172.20.0.0/16
nmap -sn 192.168.1.0/24         # 扫描网段内的存活主机


# windows tracert test
tracert -d 211.136.164.124


# 测试 MTU 大小
# 1380 (数据) + 20 (IP 头部) + 8 (ICMP 头部) = 1408 字节 (MTU)
ping -M do -s 1380 10.3.0.4

snmp

# 获取基础信息
/usr/bin/snmpwalk -v 2c -c public 10.1.249.36 .1.3.6.1.4.1.7564.30.1.0

网卡管理

ifconfig eth0 down                  # 禁用网卡
ifconfig eth0 up                    # 启用网卡
ifup eth0:0                         # 启用网卡
ifdown eth0:0                       # 禁用网卡
mii-tool em1                        # 查看网线是否连接

网络管理

查看信息


# 获取所有网卡的名称
ifconfig | grep ^[a-z] | grep -vE 'lo|docker0'| awk -F: '{print $1}'
ip link show | grep -o '^[0-9]\+: [a-zA-Z0-9]\+' | grep -vE 'lo|docker0' | awk '{print $2}'

# 获取 IP 地址
ipaddr=$(ip -4 addr show eth0 | grep inet | awk '{print $2}' | awk -F'/' '{print $1}')

ip -4 addr | grep -E "10.27.10.255|10.26.2.255" | awk '{print $2}' | awk -F'/' '{print $1}'

networkManager

# 静态ip - 注意设置后需要激活
nmcli con modify enp7s0 ipv4.method manual ipv4.addr "192.168.1.2/24, 10.10.1.5/8"

nmcli con up enp7s0

nmcli con down br2

systemctl restart NetworkManager.service
最后更新于