Linux 网络命令

1. 查看当前系统的连接

1.1 netstat

使用netstat 结合awk进行统计,统计每一种状态的tcp连接数量

[root@jenkins ~]# netstat -antp |awk '{a[$6]++}END{for (x in a) print x,a[x]}'
LISTEN 28
SYN_RECV 12
ESTABLISHED 40
established) 1
Foreign 1
TIME_WAIT 181

若服务器过多可使用ss

[root@jenkins ~]# ss -s
Total: 880 (kernel 1031)
TCP:   412 (estab 50, closed 334, orphaned 0, synrecv 0, timewait 221/0), ports 0

Transport Total     IP        IPv6
*	  1031      -         -        
RAW	  0         0         0        
UDP	  3         2         1        
TCP	  78        72        6        
INET	  81        74        7        
FRAG	  0         0         0    

netstat属于net-tools工具集,而ss属于iprote

1.2 ss

查看系统正在监听的TCP连接

ss -atr

ss -atn #仅ip

查看系统中所有连接

ss -alt

查看监听444端口的进程pid

ss -ltp|grep 444

查看进程555占用了那些端口

ss -ltp|grep 555

显示所有UDP连接

ss -u -a
  • 查看TCP sockets,使用-ta选项

  • 查看UDP sockets,使用-ua选项

  • 查看RAW sockets,使用-wa选项

  • 查看UNIX sockets,使用-xa选项

和某个ip的所有连接

ss dst 1.2.3.4

ss dst 1.2.3.4:http

ss dst 1.2.3.4:smtp

ss dst 1.2.3.4:443

查看所有的HTTP连接

ss dport = :http

查看连接本机最多的前10个ip地址

netstat -antp | awk '{print $4}' |cut -d ':' -f1 |sort|uniq -c|sort -n -k1 -r|head -n 10

Recv -Q和Send -Q

查看ss的执行结果,

ss -t -o state established

这两个值,在LISTEN和ESTAB状态分别代表不同意义。一般,正常的应用程序这两个值都应该为0(backlog除外)。数值越大,说明问题越严重。

Listen状态

Recv-Q:代表建立的连接还有多少没有被accept,比如Nginx接受新连接变的很慢
Send-Q:代表listen backlog值

ESTAB状态

Recv-Q:内核中的数据还有多少(bytes)没有被应用程序读取,发生了一定程度的阻塞
Send-Q:代表内核中发送队列里还有多少(bytes)数据没有收到ack,对端的接收处理能力不强

查看网络流量

查看流量

sar是linux上功能最全的监控软件。如图,使用sar -n DEV 1即可每秒刷新一次网络流量。

watch cat /proc/net/dev

查看占流量最大的IP

若带宽占用非常高,无法判断流量来自哪里,可以使用iftop

当你不确定内网的流量来源,比如有人在压测,api调用不合理等,都可以通过这种方法找到他

抓包

tcpdump

当需要判断是否有流量,或者调试一个难缠的 netty 应用问题,则可以通过抓包的方式去进行进一步的判断。在 Linux 上,可以通过 tcpdump 命令抓取数据,然后使用Wireshark 进行分析。

tcpdump -i eth0 -nn -s0 -v port 80
  • -i 指定网卡进行抓包

  • -n 和ss一样,表示不解析域名

  • -nn 两个n表示端口也是数字,否则解析成服务名

  • -s 设置抓包长度,0表示不限制

  • -v 抓包时显示详细输出,-vv、-vvv依次更加详细

1. 加-A 选择打印ascii ,-X打印hex码

tcpdump -A -s0 port 80

2. 抓取特定ip的相关包

tcpdump -i eth0 host 172.17.10.24

tcpdump -i eth0 dst 172.17.10.24

3. -w 参数将抓取的包写入到某个文件中

tcpdump -i eth0 -s0 -w test.pcap

4. tcpdump 支持表达式,可抓取系统中的get,post请求

tcpdump -s 0 -v -n -l |egrep -i "POST /|GET /|HOST:"

HTTP抓包

抓包工具将自身当作代理,能够抓取你的浏览器到服务器之间的通讯,并提供修改、重放、批量执行的功能。是发现问题,分析协议,攻击站点的利器。常用的有以下三款:

  • Burpsuite (跨平台)

  • Fiddle2 (Win)

  • Charles (Mac)

TIME_WAIT

TIME_WAIT 是主动关闭连接的一方保持的状态,像 nginx、爬虫服务器,经常发生大量处于time_wait状态的连接。TCP 一般在主动关闭连接后,会等待 2MS,然后彻底关闭连接。由于 HTTP 使用了 TCP 协议,所以在这些频繁开关连接的服务器上,就积压了非常多的 TIME_WAIT 状态连接。

某些系统通过 dmesg 可以看到以下信息。

通过ss -s命令查看,可以看到timewai

[root@web_02 ~]# ss -s
Total: 286 (kernel 618)
TCP:   202 (estab 9, closed 180, orphaned 0, synrecv 0, timewait 178/0), ports 0

sysctl 命令可以设置这些参数,如果想要重启生效的话,加入/etc/sysctl.conf文件中。

# 修改阈值
net.ipv4.tcp_max_tw_buckets = 50000
# 表示开启TCP连接中TIME-WAIT sockets的快速回收
net.ipv4.tcp_tw_reuse = 1
#启用timewait 快速回收。这个一定要开启,默认是关闭的。net.ipv4.tcp_tw_recycle= 1   
# 修改系統默认的TIMEOUT时间,默认是60s
net.ipv4.tcp_fin_timeout = 10

测试参数的话,可以使用 sysctl -w net.ipv4.tcp_tw_reuse = 1 这样的命令。如果是写入进文件的,则使用sysctl -p生效

CLOSE_WAIT

CLOSE_WAIT一般是由于对端主动关闭,而我方没有正确处理的原因引起的。说白了,就是程序写的有问题,属于危害比较大的一种。

应用软件

# 断点续传下载文件
wget -c $url
# 下载整站
wget -r -p -np -k $url
# 发送网络连接(常用)
curl -XGET $url
# 传输文件
scp
sftp
# 数据镜像备份
rsync

检测工具

# 连通性检测
ping google.com
# 到对端路由检测
tracepath google.com
# 域名检测
dig google.com
nslookup google.com
# 网络扫描工具
nmap
# 压力测试
iperf
# 全方位监控工具(好东西)
nmon

配置工具

# 停止某个网卡
ifdown
# 开启某个网卡
ifup
# 多功能管理工具
ethtool

压力测试

wrk
ab
webbench
http_load

多功能工具

# 远程登录
telnet
ssh
nc
# 防火墙
iptables -L

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值