linux之网络命令

拟墨画扇 提交于 2019-11-29 21:41:57

      本文整理了在实践过程中使用的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

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!