Linux运维开发linux运维部署

Linux常用网络工具总结

2018-08-19  本文已影响46人  InnocenceYWQ

本次整理了在实践过程中使用的Linux网络工具,这些工具提供的功能非常强大,我们平时使用的只是冰山一角,比如lsof、ip、tcpdump、iptables等。本文不会深入研究这些命令的强大用法,因为每个命令都足以写一篇文章,本文只是简单地介绍并辅以几个简单demo实例,旨在大脑中留个印象,平时遇到问题时能够快速搜索出这些工具,利用强大的man工具,提供一定的思路解决问题。


ping

使用这个命令判断网络的连通性以及网速,偶尔还顺带当做域名解析使用(查看域名的IP):

ping www.baidu.com

默认使用该命令会一直发送ICMP包直到用户手动中止,可以使用-c命令指定发送数据包的个数,使用-W指定最长等待时间,如果有多张网卡,还可以通过-I指定发送包的网卡。
小技巧: 在ping过程中按下ctrl+|会打印出当前的summary信息,统计当前发送包数量、接收数量、丢包率等。

其他比如-b发送广播,另外注意ping只能使用ipv4,如果需要使用ipv6,可以使用ping6命令。

netstat

这个命令用来查看当前建立的网络连接(深刻理解netstat每一项代表的含义)。最经典的案例就是查看本地系统打开了哪些端口:

centos@user:~$ sudo netstat -lnpt
[sudo] password for user:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      2183/mysqld
tcp        0      0 0.0.0.0:11211           0.0.0.0:*               LISTEN      2506/memcached
tcp        0      0 0.0.0.0:9292            0.0.0.0:*               LISTEN      1345/python
tcp        0      0 0.0.0.0:6800            0.0.0.0:*               LISTEN      2185/ceph-osd
tcp        0      0 0.0.0.0:6801            0.0.0.0:*               LISTEN      2185/ceph-osd
tcp        0      0 0.0.0.0:28017           0.0.0.0:*               LISTEN      1339/mongod
tcp        0      0 0.0.0.0:6802            0.0.0.0:*               LISTEN      2185/ceph-osd
tcp        0      0 0.0.0.0:6803            0.0.0.0:*               LISTEN      2185/ceph-osd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1290/sshd

netstat能够查看所有的网络连接,包括unix socket连接,其功能非常强大。

另外使用netstat还可以查看本地路由表:

centos@user:~$ sudo netstat -nr
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 brqcb225471-1f
172.17.0.0      0.0.0.0         255.255.0.0     U         0 0          0 docker0
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 brqcb225471-1f
192.168.56.0    0.0.0.0         255.255.255.0   U         0 0          0 eth1

以上Genmask为0.0.0.0的表示默认路由,即连接外网的路由。网络中0.0.0.0的IP地址表示整个网络,即网络中的所有主机。它的作用是帮助路由器发送路由表中无法查询的包。如果设置了全零网络的路由,路由表中无法查询的包都将送到全零网络的路由中去。

lsof

lsof命令用来查看打开的文件(list open files),由于在Linux中一切皆文件,那socket、pipe等也是文件,因此能够查看网络连接以及网络设备,其中和网络最相关的是-i选项,它输出符合条件的进程(4、6、协议、:端口、 @ip等),它的格式为[46][protocol][@hostname|hostaddr][:service|port],比如查看22端口有没有打开,哪个进程打开的:

fgp@controller:~$ sudo lsof -i :22
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    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关系,必须传入-a参数,比如查看22端口并且使用Ipv6连接的进程:

fgp@controller:~$ sudo lsof -c sshd -i 6 -a -i :22
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1290 root    4u  IPv6  10302      0t0  TCP *:ssh (LISTEN)

列出所有与192.168.56.1(我的宿主机IP地址)的ipv4连接:

fgp@controller:~$ sudo lsof -i 4@192.168.56.1
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    2299 root    3u  IPv4  14047      0t0  TCP controller:ssh->mac:54558 (ESTABLISHED)
sshd    2377  fgp    3u  IPv4  14047      0t0  TCP controller:ssh->mac:54558 (ESTABLISHED)

iftop

用过top以及iotop的,自然能够大致猜到iftop的功能,它是用于查看网络流量的工具(display bandwidth usage on an interface by host):

sudo iftop

nc

nc(netcat)被称为网络工具的瑞士军刀,其非常轻巧但功能强大!常常作为网络应用的Debug分析器,可以根据需要创建各种不同类型的网络连接。功能有:

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

tcpdump(dump traffic on a network)是一个强大的命令行抓包工具,千万不要被它的名称误导以为只能抓取tcp包,它能抓任何协议的包。它能够实现Wireshark一样的功能,并且更加灵活自由!比如需要抓取目标主机是192.168.56.1,通过端口22的传输数据包:

sudo tcpdump -n -i eth1 'dst host 192.168.56.1 && port 22'

输出为:

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
23:57:39.507490 IP 192.168.56.2.22 > 192.168.56.1.54558: Flags [P.], seq 3010719012:3010719120, ack 1116715283, win 354, options [nop,nop,TS val 1049052 ecr 187891473], length 108
23:57:39.507607 IP 192.168.56.2.22 > 192.168.56.1.54558: Flags [P.], seq 108:144, ack 1, win 354, options [nop,nop,TS val 1049052 ecr 187891473], length 36
23:57:39.507784 IP 192.168.56.2.22 > 192.168.56.1.54558: Flags [P.], seq 144:252, ack 1, win 354, options [nop,nop,TS val 1049052 ecr 187891476], length 108

抓取HTTP包:

sudo tcpdump  -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854

其中0x4745为"GET"前两个字母"GE",0x4854为"HTTP"前两个字母"HT"。

指定-A以ACII码输出数据包,使用-c指定抓取包的个数。

telnet

telnet协议客户端(user interface to the TELNET protocol),不过其功能并不仅仅限于telnet协议,有时也用来探测端口,比如查看本地端口22是否开放:

fgp@controller:~$ telnet localhost 22
Trying ::1...
Connected to localhost.
Escape character is '^]'.
SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.6

可见成功连接到localhost的22端口,说明端口已经打开,还输出了banner信息。

ifconfig

ifconfig也是熟悉的网卡配置工具(configure a network interface),我们经常使用它来查看网卡信息(比如IP地址、发送包的个数、接收包的个数、丢包个数等)以及配置网卡(开启关闭网卡、修改网络mtu、修改ip地址等)。

查看网卡ip地址:

ens34: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.4.10  netmask 255.255.255.0  broadcast 192.168.4.255
        inet6 fe80::7d7d:6c52:5787:8464  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:74:91:95  txqueuelen 1000  (Ethernet)
        RX packets 207225  bytes 303575626 (289.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 32450  bytes 2008226 (1.9 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

为网卡eth0增加一个新的地址(虚拟网卡):

[root@xuegod65 ~]# ifconfig ens33:0 192.168.4.12/24
[root@xuegod65 ~]# ifconfig ens33:0
ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.4.12  netmask 255.255.255.0  broadcast 192.168.4.255
        ether 00:0c:29:74:91:8b  txqueuelen 1000  (Ethernet)

关闭网卡以及开启网卡:

sudo ifconfig eth0 down
sudo ifconfig eth0 up

nslookup & dig

nslookup用于交互式域名解析(query Internet name servers interactively),当然也可以直接传入域名作为Ad-Hoc命令使用,比如查看google.com的ip地址:

[root@xuegod65 ~]# nslookup baidu.com
Server:     192.168.4.2
Address:    192.168.4.2#53

Non-authoritative answer:
Name:   baidu.com
Address: 220.181.57.216
Name:   baidu.com
Address: 123.125.115.110

查看使用的DNS服务器地址:

[root@xuegod65 ~]# nslookup 
> server
Default server: 192.168.4.2
Address: 192.168.4.2#53
Default server: 114.114.114.114
Address: 114.114.114.114#53
> 

dig命令也是域名解析工具(DNS lookup utility),不过提供的信息更全面:

[root@xuegod65 ~]# dig baidu.com

; <<>> DiG 9.9.4-RedHat-9.9.4-50.el7 <<>> baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42905
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; MBZ: 0005 , udp: 4096
;; QUESTION SECTION:
;baidu.com.         IN  A

;; ANSWER SECTION:
baidu.com.      5   IN  A   123.125.115.110
baidu.com.      5   IN  A   220.181.57.216

;; Query time: 3 msec
;; SERVER: 192.168.4.2#53(192.168.4.2)
;; WHEN: 四 8月 09 10:46:02 CST 2018
;; MSG SIZE  rcvd: 70

whois

whois用于查看域名所有者的信息(client for the whois directory service),比如注册邮箱、手机号码、域名服务商等:

[root@xuegod65 ~]# whois baidu.com
   Domain Name: BAIDU.COM
   Registry Domain ID: 11181110_DOMAIN_COM-VRSN
   Registrar WHOIS Server: whois.markmonitor.com
   Registrar URL: http://www.markmonitor.com
   Updated Date: 2017-07-28T02:36:28Z
   Creation Date: 1999-10-11T11:05:17Z
   Registry Expiry Date: 2026-10-11T11:05:17Z
   Registrar: MarkMonitor Inc.
   Registrar IANA ID: 292
   Registrar Abuse Contact Email: abusecomplaints@markmonitor.com
   Registrar Abuse Contact Phone: +1.2083895740
   Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
   Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
   Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
   Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
   Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
   Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
   Name Server: DNS.BAIDU.COM
   Name Server: NS2.BAIDU.COM
   Name Server: NS3.BAIDU.COM
   Name Server: NS4.BAIDU.COM
   Name Server: NS7.BAIDU.COM

route

route命令用于查看和修改路由表:

查看路由表:

[root@xuegod65 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.4.2     0.0.0.0         UG    100    0        0 ens34
0.0.0.0         192.168.4.2     0.0.0.0         UG    101    0        0 ens33
192.168.4.0     0.0.0.0         255.255.255.0   U     100    0        0 ens34
192.168.4.0     0.0.0.0         255.255.255.0   U     101    0        0 ens33
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

增加/删除路由分别为add/del子命令,比如删除默认路由:

sudo route del default

增加默认路由,网关为192.168.1.1,网卡为brqcb225471-1f:

sudo route add default gw 192.168.1.1 dev brqcb225471-1f

ip

ip命令可以说是无比强大了,它完全可以替换ifconfig、netstat、route、arp等命令。

linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者。使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务。ifconfig是net-tools中已被废弃使用的一个命令,许多年前就已经没有维护了。iproute2套件里提供了许多增强功能的命令,ip命令即是其中之一。


网络管理命令.png

设置和删除Ip地址
要给你的机器设置一个IP地址,可以使用下列ip命令:

sudo ip addr add 192.168.0.2/24 dev wlan0

请注意IP地址要有一个后缀,比如/24。这种用法用于在无类域内路由选择(CIDR)中来显示所用的子网掩码。在这个例子中,子网掩码是255.255.255.0。

在你按照上述方式设置好IP地址后,需要查看是否已经生效。

ip addr show wlan0

你也可以使用相同的方式来删除IP地址,只需用del代替add。

sudo ip addr del192.168.0.2/24 dev wlan0

列出路由表条目

ip命令的路由对象的参数还可以帮助你查看网络中的路由数据,并设置你的路由表。第一个条目是默认的路由条目,你可以随意改动它。

在这个例子中,有几个路由条目。这个结果显示有几个设备通过不同的网络接口连接起来。它们包括WIFI、以太网和一个点对点连接。

ip route show

用ip命令显示网络设备的运行状态

 ip link list
上一篇下一篇

猜你喜欢

热点阅读