本文整理了在实践过程中使用的Linux网络工具,这些工具提供的功能非常强大,我们平时使用的只是冰山一角,比如lsof、ip、tcpdump、iptables等。
本文不会深入研究这些命令的强大用法,因为每个命令都足以写一篇文章,本文只是简单地介绍并辅以几个简单demo实例,旨在大脑中留个印象,平时遇到问题时能够快速搜索出这些工具,利用强大的man工具,提供一定的思路解决问题。
1、ping
使用这个命令判断网络的连通性以及网速,偶尔还顺带当做域名解析使用(查看域名的IP):
ping www.baidu.com
默认使用该命令会一直发送ICMP包直到用户手动中止,可以使用-c命令指定发送数据包的个数,使用-W指定最长等待时间,如果有多张网卡,还可以通过-I指定发送包的网卡。
小技巧: 在ping过程中按下ctrl+|会打印出当前的summary信息,统计当前发送包数量、接收数量、丢包率等。
其他比如-b发送广播,另外注意ping只能使用ipv4,如果需要使用ipv6,可以使用ping6命令。
2、netstat
这个命令用来查看当前建立的网络连接(深刻理解netstat每一项代表的含义)。最经典的案例就是查看本地系统打开了哪些端口:
netstat -lnpt
netstat能够查看所有的网络连接,包括unix socket连接,其功能非常强大。
另外使用netstat还可以查看本地路由表:
netstat -nr
以上Genmask为0.0.0.0的表示默认路由,即连接外网的路由。网络中0.0.0.0的IP地址表示整个网络,即网络中的所有主机。它的作用是帮助路由器发送路由表中无法查询的包。如果设置了全零网络的路由,路由表中无法查询的包都将送到全零网络的路由中去。
3、lsof
lsof命令用来查看打开的文件(list open files),由于在Linux中一切皆文件,那socket、pipe等也是文件,因此能够查看网络连接以及网络设备,其中和网络最相关的是-i选项,它输出符合条件的进程(4、6、协议、:端口、 @ip等),它的格式为[46][protocol][@hostname|hostaddr][:service|port],比如查看22端口有没有打开,哪个进程打开的:
lsof -i :22
可见22端口是sshd这个命令,其进程号pid为9485打开的。
列出所有与192.168.73.128(虚拟机IP)的ipv4连接:
4、Iftop
用过top以及iotop的,自然能够大致猜到iftop的功能,它是用于查看网络流量的工具(用过top以及iotop的,自然能够大致猜到iftop的功能,它是用于查看网络流量的工具(display bandwidth usage on an interface by host):
Iftop
5、tcpdump(dump traffic>命令行抓包工具,千万不要被它的名称误导以为只能抓取tcp包,它能抓任何协议的包。它能够实现Wireshark一样的功能,并且更加灵活自由!比如需要抓取目标主机是192.168.73.128,通过端口22的传输数据包:
6、telnet
telnet协议客户端(user interface to the TELNET protocol),不过其功能并不仅仅限于telnet协议,有时也用来探测端口,比如查看本地端口22是否开放:
可见成功连接到localhost的22端口,说明端口已经打开,还输出了banner信息。
7、ifconfig
ifconfig也是熟悉的网卡配置工具(configure a network interface),我们经常使用它来查看网卡信息(比如IP地址、发送包的个数、接收包的个数、丢包个数等)以及配置网卡(开启关闭网卡、修改网络mtu、修改ip地址等)。查看网卡ip地址:
ifconfig ens33 down 关闭网卡 ifconfig ens33 up 开启网卡
比如查看baidu.com的ip地址:
8、whois
whois用于查看域名所有者的信息(client for the whois directory service),比如注册邮箱、手机号码、域名服务商等:
我们发现coolshell.cn这个域名是陈皓在万网购买注册的,注册时间是2009年,注册邮箱是haoel@hotmail.com。
9、route
route命令用于查看和修改路由表:
查看路由表:
10、ip
ip命令可以说是无比强大了,它完全可以替换ifconfig、netstat、route、arp等命令,比如查看网卡ens33 IP地址:
查看网卡ens33配置:
查看路由:
查看arp信息:
11、brctl
brctl是linux网桥管理工具,可用于查看网桥、创建网桥、把网卡加入网桥等。查看网桥如下:
其他子命令如addbr用于创建网桥、delbr用户删除网桥(删除之前必须处于down状态,使用ip link set br_name down)、addif把网卡加到网桥等。
12、traceroute
ping命令用于探测两个主机间连通性以及响应速度,而traceroute会统计到目标主机的每一跳的网络状态(print the route packets trace to network host),这个命令常常用于判断网络故障,比如本地不通,可使用该命令探测出是哪个路由出问题了。如果网络很卡,该命令可判断哪里是瓶颈:
可以看到,从主机到www.baidu.com共经过11跳,并统计了总共的响应时间。
另外可以参考tracepath。
13、mtr
mtr是常用的网络诊断工具(a network diagnostic tool),它把ping和traceroute并入一个程序的网络诊断工具中并实时刷新。
从图上可以看出从本地到www.baidu.com经过的所有路由,每一个路由间的丢包率、响应时间等。
14、ss
ss命令也是一个查看网络连接的工具(another utility to investigate sockets),用来显示处于活动状态的套接字信息。
ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。
可能你不会有切身的感受,但请相信我,当服务器维持的连接达到上万个的时候,使用netstat等于浪费 生命,而用ss才是节省时间。 天下武功唯快不破。ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢。
其中比较常用的参数包括:
-l 查看处于LISTEN状态的连接
-t 查看tcp连接
-4 查看ipv4连接
-n 不进行域名解析
因此我们可以通过ss命令查看本地监听的所有端口(和netstat命令功能类似):
15、axel
axel是一个多线程下载工具(A light download accelerator for Linux),通过建立多连接,能够大幅度提高下载速度,所以我经常使用这个命令开挂下载大文件,比wget快多了,并且默认就支持断点下载:
开启20个线程下载文件:axel -n 20 URL
这个强大的下载工具极力推荐,非常好用!
总结Linux中的常用的网络工具,其中包括
网络配置相关:ifconfig、ip
路由相关:route、netstat、ip
查看端口工具:netstat、lsof、ss、nc、telnet
下载工具:curl、wget、axel
防火墙:iptables、ipset
流量相关:iftop、nethogs
连通性及响应速度:ping、traceroute、mtr、tracepath
域名相关:nslookup、dig、whois
web服务器:python、nginx
抓包相关:tcpdump
网桥相关:ip、brctl、ifconfig、ovs
参考链接:https://mp.weixin.qq.com/s/n2j-kVg2iwX_BerqN3pvgQ