本文整理了在实践过程中使用的Linux网络工具,这些工具提供的功能非常强大,我们平时使用的只是冰山一角,比如、、、等。
本文不会深入研究这些命令的强大用法,因为每个命令都足以写一篇文章,本文只是简单地介绍并辅以几个简单demo实例,旨在大脑中留个印象,平时遇到问题时能够快速搜索出这些工具,利用强大的工具,提供一定的思路解决问题。
ping
使用这个命令判断网络的连通性以及网速,偶尔还顺带当做域名解析使用(查看域名的IP):
ping google.com
默认使用该命令会一直发送ICMP包直到用户手动中止,可以使用命令指定发送数据包的个数,使用指定最长等待时间,如果有多张网卡,还可以通过指定发送包的网卡。
小技巧:在ping过程中按下会打印出当前的summary信息,统计当前发送包数量、接收数量、丢包率等。
其他比如发送广播,另外注意ping只能使用ipv4,如果需要使用ipv6,可以使用命令。
netstat
这个命令用来查看当前建立的网络连接(深刻理解netstat每一项代表的含义)。最经典的案例就是查看本地系统打开了哪些端口:
netstat能够查看所有的网络连接,包括unix socket连接,其功能非常强大。
另外使用netstat还可以查看本地路由表:
以上为的表示默认路由,即连接外网的路由。网络中0.0.0.0的IP地址表示整个网络,即网络中的所有主机。它的作用是帮助路由器发送路由表中无法查询的包。如果设置了全零网络的路由,路由表中无法查询的包都将送到全零网络的路由中去。
lsof
命令用来查看打开的文件(list open files),由于在Linux中一切皆文件,那socket、pipe等也是文件,因此能够查看网络连接以及网络设备,其中和网络最相关的是选项,它输出符合条件的进程(4、6、协议、:端口、 @ip等),它的格式为,比如查看22端口有没有打开,哪个进程打开的:
fgp@controller:~$ sudo lsof -i :22COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEsshd 1290 root 3u IPv4 10300 0t0 TCP *:ssh (LISTEN)sshd 1290 root 4u IPv6 10302 0t0 TCP *:ssh (LISTEN)
可见22端口是sshd这个命令,其进程号pid为1290打开的。
可以指定多个条件,但默认是OR关系的,如果需要AND关系,必须传入参数,比如查看22端口并且使用Ipv6连接的进程:
fgp@controller:~$ sudo lsof -c sshd -i 6 -a -i :22COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEsshd 1290 root 4u IPv6 10302 0t0 TCP *:ssh (LISTEN)
列出所有与(我的宿主机IP地址)的ipv4连接:
iftop
用过以及的,自然能够大致猜到的功能,它是用于查看网络流量的工具(display bandwidth usage on an interface by host):
sudo iftop
nc
nc(netcat)被称为网络工具的瑞士军刀,其非常轻巧但功能强大!常常作为网络应用的Debug分析器,可以根据需要创建各种不同类型的网络连接。官方描述的功能包括:
simple TCP proxies
shell-script based HTTP clients and servers
network daemon testing
a SOCKS or HTTP ProxyCommand for ssh(1)
and much, much more
总之非常强大,能够实现简单的聊天工具、模拟ssh登录远程主机、远程传输文件等。一个经典的用法是端口扫描。比如我要扫描主机端口,探测哪些端口开放的(黑客攻击必备):
fgp@controller:~$ nc -zv 192.168.56.2 1-100 |& grep 'succeeded!'Connection to 192.168.56.2 22 port [tcp/ssh] succeeded!Connection to 192.168.56.2 80 port [tcp/http] succeeded!
从结果中发现,该主机打开了和端口。
tcpdump
(dump traffic on a network)是一个强大的命令行抓包工具,千万不要被它的名称误导以为只能抓取tcp包,它能抓任何协议的包。它能够实现一样的功能,并且更加灵活自由!比如需要抓取目标主机是,通过端口的传输数据包:
sudo tcpdump -n-i eth1'dst host 192.168.56.1 && port 22'
输出为:
抓取包:
sudo tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854
其中为前两个字母,为前两个字母。
指定以ACII码输出数据包,使用指定抓取包的个数。
telnet
telnet协议客户端(user interface to the TELNET protocol),不过其功能并不仅仅限于telnet协议,有时也用来探测端口,比如查看本地端口22是否开放:
可见成功连接到的端口,说明端口已经打开,还输出了信息。
ifconfig
ifconfig也是熟悉的网卡配置工具(configure a network interface),我们经常使用它来查看网卡信息(比如IP地址、发送包的个数、接收包的个数、丢包个数等)以及配置网卡(开启关闭网卡、修改网络mtu、修改ip地址等)。
查看网卡ip地址:
为网卡eth0增加一个新的地址(虚拟网卡):
关闭网卡以及开启网卡:
领取专属 10元无门槛券
私享最新 技术干货