linux基础命令介绍六:网络

   2016-12-11 0
核心提示:本文将讲述网络相关命令,作者假定读者具备TCP/IP协议栈的基础知识。对于相关命令及其输出只介绍它的基本的使用方法和大概的描述,具体协议将不作详细解释。如今网络无疑是很重要的,linux系统中提供了丰富的网络测试与管理命令。我们来一起看看它们。1、ping

本文将讲述网络相关命令,作者假定读者具备TCP/IP协议栈的基础知识。对于相关命令及其输出只介绍它的基本的使用方法和大概的描述,具体协议将不作详细解释。

linux基础命令介绍六:网络

如今网络无疑是很重要的,linux系统中提供了丰富的网络测试与管理命令。我们来一起看看它们。

1、ping 发送TCMP回显请求报文,并等待返回TCMP回显应答。

ping [OPTIONS]... destination 

这里的目标destination可以是目的IP地址或者域名/主机名

选项-c指定发送请求报文的次数,当ping没有任何选项时,在linux中默认将一直发送请求报文直到手动终止。

[root@centos7 ~]# ping -c 3 www.baidu.com 
PING www.a.shifen.com (61.135.169.121) 56(84) bytes of data. 
64 bytes from 61.135.169.121: icmp_seq=1 ttl=52 time=1.35 ms 
64 bytes from 61.135.169.121: icmp_seq=2 ttl=52 time=1.32 ms 
64 bytes from 61.135.169.121: icmp_seq=3 ttl=52 time=1.22 ms 
 
--- www.a.shifen.com ping statistics --- 
3 packets transmitted, 3 received, 0% packet loss, time 2003ms 
rtt min/avg/max/mdev = 1.225/1.303/1.359/0.064 ms  

首先,ping程序会向域名服务器(DNS)发送请求,解析域名www.baidu.com的IP地址。DNS返回域名的一个别名www.a.shifen.com以及对应的IP地址61.135.169.121。之后ping程序开始向这个地址发送请求报文,每1s发送一个,ping收到TCMP回显应答并将结果显示在终端上,包括ICMP序列号(icmp_seq),生存时间(ttl)和数据包往返时间(time)。最后,给出汇总信息,包括报文总收发情况,总时间,往返时间最小值、平均值、最大值、平均偏差(越大说明网络越不稳定)。

[root@centos7 ~]# ping www.a.com 
ping: unknown host www.a.com  

当目的域名无法解析出IP地址时,会报未知主机的错

[root@centos7 ~]# ping 192.168.0.1 
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data. 
^C                           #这里按CTRL+C键手动终止了进程 
--- 192.168.0.1 ping statistics --- 
6 packets transmitted, 0 received, 100% packet loss, time 4999ms  

当目的IP地址没有路由时不会收到任何ICMP回显报文

[root@centos7 ~]# ping -c2 10.0.1.2 
PING 10.0.1.2 (10.0.1.2) 56(84) bytes of data. 
From 10.0.1.254 icmp_seq=1 Destination Host Unreachable 
From 10.0.1.254 icmp_seq=2 Destination Host Unreachable 
 
--- 10.0.1.2 ping statistics --- 
2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 999ms 
pipe 2  

当有目的IP的路由但无法达到时显示目标不可达错误(Destination Host Unreachable)。

ICMP回显应答还包括超时(request time out)等其他类型。

2、hostname显示或设置系统主机名

hostname [OPTIONS]... [NAME] 

直接执行命令hostname时将显示主机名:

[root@centos7 temp]# hostname 
centos7 
[root@centos7 temp]#  

这个主机名是系统的gethostname(2)函数返回的。

可以通过执行命令hostname NAME来临时改变主机名:

[root@centos7 temp]# hostname NAME 
[root@centos7 temp]# hostname 
NAME  

这个临时修改实际上是修改了linux kernel中一个同为hostname的内核参数,它保存在/proc/sys/kernel/hostname中。如果需要永久修改则需要修改配置文件/etc/sysconfig/network,centos7中需要修改/etc/hostname。需要注意的是,如果配置文件中的主机名是localhost或localhost.localdomain时,系统会取得网络接口的IP地址,并用这个地址找出/etc/hosts文件中对应的主机名,然后将其设置成最终的hostname。

3、host DNS查询

host name 

host命令通过配置文件/etc/resolv.conf中指定的DNS服务器查询name的IP地址:

[root@centos7 temp]# host www.baidu.com 
www.baidu.com is an alias for www.a.shifen.com. 
www.a.shifen.com has address 61.135.169.121 
www.a.shifen.com has address 61.135.169.125  

4、dig DNS查询

dig和host命令的语法一致,但提供了更详细的信息和更多的选项:

[root@centos7 ~]# dig www.baidu.com 
 
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.2 <<>> www.baidu.com 
;; global options: +cmd 
;; Got answer: 
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22125 
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0 
 
;; QUESTION SECTION: 
;www.baidu.com.                 IN      A 
 
;; ANSWER SECTION: 
www.baidu.com.          113     IN      CNAME   www.a.shifen.com. 
www.a.shifen.com.       113     IN      A       61.135.169.125 
www.a.shifen.com.       113     IN      A       61.135.169.121 
 
;; Query time: 2 msec 
;; SERVER: 223.5.5.5#53(223.5.5.5) 
;; WHEN: 四 11月 10 12:31:20 CST 2016 
;; MSG SIZE  rcvd: 90 
 
[root@centos7 ~]#   

如只查询域名的A记录并以短格式显示:

[root@centos7 ~]# dig www.baidu.com A +short 
www.a.shifen.com. 
61.135.169.125 
61.135.169.121 
[root@centos7 ~]#   

或者:

[root@centos7 ~]# dig +nocmd www.baidu.com A +noall +answer      
www.baidu.com.          252     IN      CNAME   www.a.shifen.com. 
www.a.shifen.com.       252     IN      A       61.135.169.125 
www.a.shifen.com.       252     IN      A       61.135.169.121  

还可以用@server的方式指定DNS服务器:

[root@centos7 ~]# dig +noall +answer www.baidu.com A @8.8.8.8 
www.baidu.com.          21      IN      CNAME   www.a.shifen.com. 
www.a.shifen.com.       263     IN      A       61.135.169.125 
www.a.shifen.com.       263     IN      A       61.135.169.121  

更多的命令及选项请自行man

5、traceroute或tracepath 路由跟踪

[root@centos7 ~]# tracepath www.baidu.com 
 1?: [LOCALHOST]                                         pmtu 1500 
 1:  10.0.1.103                                            0.396ms  
 1:  10.0.1.103                                            0.350ms  
 2:  210.51.161.1                                          1.187ms asymm  3  
 3:  210.51.161.1                                          8.186ms  
 4:  210.51.175.81                                         1.117ms  
 5:  61.148.142.61                                         8.554ms asymm 12  
 6:  61.148.147.13                                         1.694ms asymm 12  
 7:  123.126.8.117                                         3.934ms asymm 10  
 8:  61.148.155.46                                         2.703ms asymm 10 
 ....  

这里只列出部分输出,表示跟踪到目的地址的路由,每一跳都返回。

6、ifconfig 配置网络接口

当命令没有任何参数时显示所有网络接口的信息:

[root@centos7 ~]# ifconfig 
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500 
        inet 172.20.71.254  netmask 255.255.255.0  broadcast 172.20.71.255 
        inet6 fe80::250:56ff:fea4:fe34  prefixlen 64  scopeid 0x20<link> 
        ether 00:50:56:a4:fe:34  txqueuelen 1000  (Ethernet) 
        RX packets 11996157  bytes 775368588 (739.4 MiB) 
        RX errors 0  dropped 0  overruns 0  frame 0 
        TX packets 12  bytes 888 (888.0 B) 
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0 
 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500 
        inet 10.0.1.254  netmask 255.255.255.0  broadcast 10.0.1.255 
        inet6 fe80::250:56ff:fea4:a09  prefixlen 64  scopeid 0x20<link> 
        ether 00:50:56:a4:0a:09  txqueuelen 1000  (Ethernet) 
        RX packets 20941185  bytes 1307830447 (1.2 GiB) 
        RX errors 0  dropped 0  overruns 0  frame 0 
        TX packets 147552  bytes 11833605 (11.2 MiB) 
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0 
 
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536 
        inet 127.0.0.1  netmask 255.0.0.0 
        inet6 ::1  prefixlen 128  scopeid 0x10<host> 
        loop  txqueuelen 1  (Local Loopback) 
        RX packets 0  bytes 0 (0.0 B) 
        RX errors 0  dropped 0  overruns 0  frame 0 
        TX packets 0  bytes 0 (0.0 B) 
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0 
 
[root@centos7 ~]#  

本例中显示了两个网卡ens32和ens33以及环回口lo的信息,包括mtu,ip地址,掩码,mac地址,传输和接收数据量等等。

选项-s显示精简的信息:

[root@idc-v-71253 ~]# ifconfig -s ens32 
Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg 
ens32     1500 11996951      0      0 0            12      0      0      0 BMRU  

如给ens33增加一个新地址10.0.1.4:

[root@centos7 ~]# ifconfig ens33:0 10.0.1.4/24 up 
[root@centos7 ~]# ifconfig ens33:0    
ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500 
        inet 10.0.1.4  netmask 255.255.255.0  broadcast 10.0.1.255 
        ether 00:50:56:a4:0a:09  txqueuelen 1000  (Ethernet) 

命令中/24表明接口地址的掩码,up表示启用此接口。注意如果ip地址已经被使用,这里依然会被设置成功,但此地址被访问时,可能会有冲突。

停用某接口:

[root@centos7 ~]# ifconfig ens33:0 down 

如果需要永久增加或修改当前接口的地址,最好直接编辑网卡配置文件/etc/sysconfig/network-scripts/ifcfg-ens33(其他系统换成相应文件)中IPADDR字段,然后重启网络systemctl restart network或service network restart生效。

7、arp和arping

命令arp显示系统的arp缓存,命令arping给邻居主机发送ARP请求。

[root@idc-v-71253 ~]# arp -a 
? (10.0.1.1) at 68:8f:84:01:f1:ff [ether] on ens33 
? (10.0.1.102) at 00:50:56:a4:18:9a [ether] on ens33 
? (10.0.1.254) at 00:50:56:a4:a9:16 [ether] on ens33 
? (10.0.1.10) at 00:50:56:a4:d2:e4 [ether] on ens33 
? (10.0.1.104) at 00:50:56:a4:37:a7 [ether] on ens33  

?表示未知域名,最后的网卡名表示arp表项对应的网络接口

如发现某地址不稳定,可以使用arping测试该地址是否为MAC地址冲突:

[root@centos7 ~]# arping 10.0.1.252 -I ens33 
ARPING 10.0.1.252 from 10.0.1.254 ens33 
Unicast reply from 10.0.1.252 [00:50:56:A4:65:71]  0.843ms 
Unicast reply from 10.0.1.252 [00:50:56:A4:0A:09]  1.034ms  

这里两条返回信息中的MAC地址不同,说明有两块网卡配置了相同的IP地址。选项-I指定发送arp请求的网络接口。

如果刚刚更改了网卡的IP地址,但上游设备(如交换机)的arp表项还是老的,可以使用arping来强制刷新:

[root@centos7 ~]# arping -c3 -I ens33 -s 10.0.1.254 10.0.1.1 
ARPING 10.0.1.1 from 10.0.1.254 ens33 
Unicast reply from 10.0.1.1 [68:8F:84:01:F1:FF]  19.466ms 
Unicast reply from 10.0.1.1 [68:8F:84:01:F1:FF]  2.358ms 
Unicast reply from 10.0.1.1 [68:8F:84:01:F1:FF]  24.305ms 
Sent 3 probes (1 broadcast(s)) 
Received 3 response(s)  

-c指定发送arp请求次数,-s指定源地址,最后的IP表示发送目标(这里是网关地址)。

8、route 显示或更改路由表

[root@centos7 ~]# route 
Kernel IP routing table 
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface 
10.0.1.0        0.0.0.0         255.255.255.0   U     0      0        0 ens33 
link-local      0.0.0.0         255.255.0.0     U     1002   0        0 ens32 
link-local      0.0.0.0         255.255.0.0     U     1003   0        0 ens33 
172.20.71.0     0.0.0.0         255.255.255.0   U     0      0        0 ens32 
192.168.78.0    10.0.1.104      255.255.255.0   UG    0      0        0 ens33  

其中Destination表示目的网段或目标主机;Gateway表示网关地址;Genmask表示目的网段的掩码;Flags表示路由标志:U表示路由是启用(up)的、G表示网关;Metric表示目标距离,通常用跳数表示;Ref表示路由的引用数;Use表示路由查找计数;Iface表示此条路由的出口。

选项-n表示用数字形式显示目的网段

选项add和del表示添加或删除一条路由。

选项-net和netmask表示指定目的网段及掩码。

选项gw表示指定网关。

选项dev IF表示指定出口网卡

如增加一条到192.56.76.x的路由,使它的出口为ens32:

route add -net 192.56.76.0 netmask 255.255.255.0 dev ens32 

如增加一条默认路由,指明它的网关为10.0.1.1

route add default gw 10.0.1.1 

如增加一条到172.20.70.0的路由,网关为10.0.1.2

route add -net 172.20.70.0/24 gw 10.0.1.2 

如删除默认路由

route del default 

9、telnet 提供远程登录功能

由于telnet协议使用明文传输,在要求安全登录的环境中并不适用。现在通常用它来进行网络服务的端口测试:

[root@centos7 ~]# telnet 10.0.1.251 80 
Trying 10.0.1.251... 
Connected to 10.0.1.251. 
Escape character is '^]'. 
^]            #这里按了CTRL+],也可以按CTRL+C强行退出。 
telnet> quit 
Connection closed.  

这里对方的80端口是开启并允许通信的。当对端端口没有开启时:

[root@centos7 ~]# telnet 10.0.1.251 81 
Trying 10.0.1.251... 
telnet: connect to address 10.0.1.251: No route to host  

当对端拒绝连接时:

[root@centos7 ~]# telnet 10.0.1.251 8085 
Trying 10.0.1.251... 
telnet: connect to address 10.0.1.251: Connection refused  

10、ssh 远程登录程序

ssh [OPTIONS]... [user@]hostname [command] 

ssh的全称是Secure Shell,在不安全的网络主机间提供安全加密的通信,旨在代替其他远程登录协议。

[root@centos7 ~]# ssh 10.0.1.253 
The authenticity of host '10.0.1.253 (10.0.1.253)' can't be established. 
ECDSA key fingerprint is 96:bd:a3:a7:87:09:1b:53:44:4c:9b:b9:5f:b2:97:89. 
Are you sure you want to continue connecting (yes/no)? yes   #这里输入yes 
Warning: Permanently added '10.0.1.253' (ECDSA) to the list of known hosts. 
root@10.0.1.253's password:           #这里输入密码 
Last login: Fri Nov 11 09:04:01 2016 from 192.168.78.137 
[root@idc-v-71253 ~]#                 #已登录  

当命令ssh后直接跟主机IP时表示使用默认用户root登录,如果是首次登录,需要确认添加该主机的认证key,当输入yes后,即会在本机/root/.ssh/known_hosts中增加一条该主机的记录,下一次登录时就不用再次确认了。然后需要输入用户密码,通过验证之后,我们就获得了目的主机的一个shell,我们就可以在这个shell中执行命令了。

在新shell中输入exit即可退回到原shell。

如果需要频繁登录某主机,但不想每次都输入密码,可以设置免密码登录:

[root@centos7 ~]# ssh-keygen -t rsa        
Generating public/private rsa key pair. 
Enter file in which to save the key (/root/.ssh/id_rsa): #回车 
Enter passphrase (empty for no passphrase): #回车 
Enter same passphrase again: #回车 
Your identification has been saved in /root/.ssh/id_rsa. #私钥 
Your public key has been saved in /root/.ssh/id_rsa.pub. #公钥 
The key fingerprint is: 
be:c3:d0:02:50:35:35:fe:60:d6:2f:26:96:f0:e1:e6 root@centos7 
The key's randomart image is: 
+--[ RSA 2048]----+ 
|   ...o.o        | 
|  .    o o       | 
|   .  . * .      | 
|    .  * = .     | 
|     . .S + .    | 
|      o=.o .     | 
|       +E        | 
|        o.       | 
|        ..       | 
+-----------------+ 
[root@centos7 ~]#  
[root@centos7 ~]# ssh-copy-id 10.0.1.253 
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed 
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys 
root@10.0.1.253's password:  
 
Number of key(s) added: 1 
 
Now try logging into the machine, with:   "ssh '10.0.1.253'" 
and check to make sure that only the key(s) you wanted were added. 
 
[root@centos7 ~]#   

其中命令ssh-keygen用来生成公钥私钥,选项-t指明密钥类型。之后使用命令ssh-copy-id将公钥发送至目标主机,这里需要输入目标主机用户密码。然后就可以免密码登录了:

[root@centos7 ~]# ssh 10.0.1.253 
Last login: Fri Nov 11 11:08:37 2016 from 10.0.1.254 
[root@idc-v-71253 ~]#   

还可以通过ssh远程执行命令:

[root@centos7 ~]# ssh 10.0.1.252 "hostname" 
root@10.0.1.252's password:  #输入密码 
idc-v-71252                  #显示命令结果 
[root@centos7 ~]#            #并不登录 

或者手动将公钥拷贝至目标主机:

[root@centos7 ~]# cat /root/.ssh/id_rsa.pub | ssh 10.0.1.252 "cat - >> /root/.ssh/authorized_keys" 
root@10.0.1.252's password:          #输入密码 
[root@centos7 ~]# ssh 10.0.1.252     #免密登录 
Last login: Thu Nov 10 14:42:11 2016 from 192.168.78.135 
[root@idc-v-71252 ~]#   

选项-p为登录指定端口:

[root@centos7 temp]# ssh -p22 10.0.1.252 
Last login: Fri Nov 11 11:44:31 2016 from 10.0.1.254 
[root@idc-v-71252 ~]#  

端口设置在服务端配置文件/etc/ssh/sshd_config中,默认端口号为22,如更改需将#Port 22去掉注释并将22更改为需要的端口,然后重启sshd服务service sshd restart或systemctl restart sshd。

如果需要使用另外的用户登录系统则执行ssh user@host

我们可以用tar命令结合ssh和管道,将本地(远程)文件备份到远程(本地):

tar zc /home/temp | ssh user@host "tar xz"  #本地temp目录备份到远程 
ssh user@host "tar cz /home/temp" | tar xz  #远程temp目录备份到本地  

选项-L [bind_address:]port:host:hostport设置本地端口转发

[root@centos7 ~]# ssh -L 2222:10.0.1.252:22 10.0.1.253 
Last login: Mon Nov 14 10:34:43 2016 from 10.0.1.254 
[root@idc-v-71253 ~]#    #注意如果这里exit断开连接,则此转发也将终止。  

此命令的意思是绑定本地端口2222,并将所有发送至此端口的数据通过中间主机10.0.1.253转发至目标主机10.0.1.252的22端口,此时如果用ssh登录本机的2222端口,则实际登录的是主机10.0.1.252

[root@centos7 ~]# ssh -p 2222 127.0.0.1 
Last login: Mon Nov 14 10:34:56 2016 from 10.0.1.253 
[root@idc-v-71252 ~]#   

这里默认绑定的是本机的环回口127.0.0.1,如绑定到其他地址,则根据语法设置bind_address。

选项-N表示不执行命令,只设置端口转发时有用

由于上述端口转发命令ssh -L 2222:10.0.1.252:22 10.0.1.253会登录到中间主机,并且退出后端口转发也会终止,使用-N选项将不会登录,再配合shell后台执行,将会是一个不错的设置端口转发的选择(但要注意对中间主机需要免密码登录):

[root@centos7 ~]# ssh -N -L 2222:10.0.1.252:22 10.0.1.253 & 
[1] 12432 
[root@centos7 ~]#  

命令最后的符号&表示此命令将在后台执行,返回的信息中[1]表示后台命令编号,12432表示命令的PID。(关于shell后台命令,以后的文章中会有叙述)

选项-R [bind_address:]port:host:hostport 设置远程端口转发

如我们在10.0.1.253上执行:

ssh -R 2222:10.0.1.252:22 10.0.1.254 

然后在10.0.1.254上登录:

[root@centos7 ~]# ssh -p 2222 localhost 
Last login: Mon Nov 14 10:40:44 2016 from 10.0.1.253 
[root@idc-v-71252 ~]#  

这里的意思是使远程主机10.0.1.254(相对10.0.1.253来说)监听端口2222,然后将所有发送至此端口的数据转发至目标主机10.0.1.252的端口22。之后再在10.0.1.254登录本地(localhost)的2222端口时,实际通过中间主机10.0.1.253登录目标主机10.0.1.252。

选项-o OPTION指定配置文件(如/etc/ssh/sshd_config)内选项

如避免第一次登录时输入yes确认,可增加-o StrictHostKeyChecking=no。

11、scp 远程复制文件

scp [OPTIONS]... [[user@]host1:]file1 ... [[user@]host2:]file2 

scp命令通过ssh协议将数据加密传输,和ssh登录类似,需要输入远程主机用户密码。

如将远程主机10.0.1.253中文件/root/tcp.sh复制到本地当前目录下:

[root@centos7 ~]# scp root@10.0.1.251:/root/a.txt ./ 
root@10.0.1.251's password:  
a.txt                                       100%  125     0.1KB/s   00:00     
[root@centos7 ~]#   

命令会显示传输状态(传输百分比,大小,速度,用时)。

将本地文件复制到远程无非是将源和目的调换位置。

选项-P指定远端连接端口(ssh服务端口),-o ssh_option使用ssh选项。

选项-l limit传输限速,limit单位为Kbit/s。

和命令cp类似,选项-r表示复制目录,-p表示保留文件权限时间等

12、netstat 打印网络信息

选项-a显示所有端口信息:

[root@centos7 ~]# netstat -a 
Active Internet connections (servers and established) 
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN      
tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN      
tcp        0     52 10.0.1.254:ssh   192.168.78.143:49583    ESTABLISHED 
tcp6       0      0 [::]:commplex-main      [::]:*                  LISTEN      
tcp6       0      0 [::]:4243               [::]:*                  LISTEN      
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      
tcp6       0      0 localhost:smtp          [::]:*                  LISTEN      
raw6       0      0 [::]:ipv6-icmp          [::]:*                  7           
raw6       0      0 [::]:ipv6-icmp          [::]:*                  7           
Active UNIX domain sockets (servers and established) 
Proto RefCnt Flags       Type       State         I-Node   Path 
unix  2      [ ACC ]     STREAM     LISTENING     12807    /run/systemd/private 
unix  2      [ ACC ]     STREAM     LISTENING     12815    /run/lvm/lvmpolld.socket 
unix  2      [ ]         DGRAM                    12818    /run/systemd/shutdownd 
unix  2      [ ACC ]     STREAM     LISTENING     16403    /var/run/dbus/system_bus_socket 
....  

这里只显示部分信息

选项-t显示TCP连接信息

选项-n显示IP地址而不进行域名转换

选项-p显示PID和程序名

[root@centos7 ~]# netstat -antp 
Active Internet connections (servers and established) 
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1358/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2162/master          
tcp        0     52 10.0.1.254:22           192.168.78.143:49583    ESTABLISHED 12044/sshd: root@pt  
tcp6       0      0 :::5000                 :::*                    LISTEN      17222/docker-proxy   
tcp6       0      0 :::4243                 :::*                    LISTEN      16983/docker         
tcp6       0      0 :::22                   :::*                    LISTEN      1358/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      2162/master          
[root@centos7 ~]#   

其中Proto表示协议(包括TCP、UDP等);Recv-Q和Send-Q表示接收和发送队列,一般都为0,如果非0则表示本地的接收或发送缓存区有数据等待处理;Local Address和Foreign Address分别表示本地地址和远端地址;State表示连接状态,对应于TCP各种连接状态;PID/Program name表示进程号和程序名。

选项-l表示只显示状态为LISTEN的连接

[root@centos7 ~]# netstat -ntl 
Active Internet connections (only servers) 
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      
tcp6       0      0 :::5000                 :::*                    LISTEN      
tcp6       0      0 :::4243                 :::*                    LISTEN      
tcp6       0      0 :::22                   :::*                    LISTEN      
tcp6       0      0 ::1:25                  :::*                    LISTEN      
[root@centos7 ~]#  

选项-u表示显示UDP连接信息

选项-r表示显示路由信息

[root@centos7 ~]# netstat -r 
Kernel IP routing table 
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface 
default         10.0.1.103      0.0.0.0         UG        0 0          0 ens33 
10.0.1.0        0.0.0.0         255.255.255.0   U         0 0          0 ens33 
172.20.71.0     0.0.0.0         255.255.255.0   U         0 0          0 ens32 
192.168.78.0    10.0.1.104      255.255.255.0   UG        0 0          0 ens33  

选项-i显示接口信息

[root@centos7 ~]# netstat -i 
Kernel Interface table 
Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg 
ens32     1500 13196107      0     77 0          3246      0      0      0 BMRU 
ens33     1500 25312388      0     88 0       2516050      0      0      0 BMRU 
lo       65536  2503589      0      0 0       2503589      0      0      0 LRU  

13、tcpdump 网络抓包工具

命令tcpdump捕获某网络接口符合表达式expression的数据包,并打印出数据包内容的描述信息。

选项-i指定网卡:

[root@idc-v-71253 ~]# tcpdump -i ens33 
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode 
listening on ens33, link-type EN10MB (Ethernet), capture size 65535 bytes 
15:41:59.121948 IP 10.0.1.108.3693 > 239.100.1.1.websm: UDP, length 58 
15:41:59.122191 IP 10.0.1.109.35673 > 239.100.1.1.websm: UDP, length 57 
15:41:59.128282 IP 10.0.1.253.ssh > 192.168.78.143.51694: Flags [P.], seq 749565300:749565496, ack 3522345564, win 255, length 196 
15:41:59.134127 IP 192.168.78.143.51694 > 10.0.1.253.ssh: Flags [.], ack 196, win 3977, length 0 
15:41:59.140319 ARP, Request who-has 10.0.1.31 tell 10.0.1.102, length 46 
15:41:59.168328 ARP, Request who-has 10.0.1.37 tell 10.0.1.102, length 46 
15:41:59.262235 ARP, Request who-has 192.168.10.150 tell 192.168.10.151, length 46 
15:41:59.622090 IP 10.0.1.108.3693 > 239.100.1.1.websm: UDP, length 58 
15:41:59.622178 IP 10.0.1.109.35673 > 239.100.1.1.websm: UDP, length 57 
....  

启动命令之后显示出可以使用-v或-vv显示更详细的信息,开始从ens33捕获数据包。输出显示出各个发送或接收数据包包头信息(包括ARP、IP、TCP、UDP等等协议)。此命令并未指定expression,所以默认将捕获所有数据包。

如果需要将数据包捕获然后通过其他程序(如wireshark)分析,可以使用选项-w file将数据写入文件,同时还需要使用选项-s 0指定能够捕获的数据包大小为65535字节,以避免数据包被截断而无法被分析。

真实环境中,流经网卡的数据包量是巨大的。可以使用表达式来对数据包进行过滤,对于每个数据包,都要经过表达式的过滤,只有表达式的值为true时,才会输出。

expression中可以包含一到多个关键字指定的条件,可以使用and(或&&)、or(或||)、not(或!)和括号()表示各个关键字间的逻辑关系,可以用>、<表示比较,还可以进行计算。其中关键字包括:

type类型关键字,如host、net、port和portrange,分别表示主机、网段、端口号、端口段。

direction方向关键字,如src、dst分别表示源和目的。

proto协议关键字,如fddi、arp、ip、tcp、udp等分别表示各种网络协议。

由于篇幅所限,下面的例子中将只描述选项和表达式所起到的作用,不再解释输出内容:

tcpdump -i ens33 dst host 10.0.1.251  
#监视所有从端口ens33发送到主机10.0.1.251的数据包,主机也可以是主机名 
tcpdump -i eth0 host ! 211.161.223.70 and ! 211.161.223.71 and dst port 80  
#监听端口eth0,抓取不是来自或去到主机211.161.223.70和211.161.223.71并且目标端口为80的包 
tcpdump tcp port 23 host 210.27.48.1  
#获取主机210.27.48.1接收或发出的telnet包 
tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0) and src net (183.60.190 or 122.13.220)' -s0 -i eth0 -w ipdump 
#抓取源或目的端口是80,且源网络是(183.60.190.0/24 或者 122.13.220.0/24),并且含有数据,而不是SYN,FIN以及ACK-only等不含数据的TCP数据包写入文件ipdump 
#注意这里表达式使用单引号引起来以避免其中的特殊字符被shell解析而造成语法错误 
tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and ! src and dst net 10.0.0' 
#只打印TCP的开始和结束包(SYN和FIN标记),并且源和目标网段均不是10.0.0.0/24 
tcpdump 'gateway 10.0.1.1 and ip[2:2] > 576'  
#表示抓取发送至网关10.0.1.1并且大于576字节的IP数据包  

网络相关命令内容较多,下一篇将继续介绍。

 
标签: Linux命令
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 每天一条linux命令——halt
    halt命令用来关闭正在运行的Linux操作系统。halt命令会先检测系统的runlevel,若runlevel为0或6,则关闭系统,否则即调用shutdown来关闭系统。 语法:halt(选项)选项:-d:不要在wtmp中记录;-f:不论目前的runlevel为何,不调用shutdown即强制关闭系统;-i:
    02-10
  • 几个linux命令查看堆栈内存问题 几个linux命令
      公司编写代码,发现整个在程序里面调用system时候总是失败,原因是can't allocate memory ,根本原因不是内存不足,而是堆栈内存不够。使用ulimit -s 2048后有所好转但是发现一旦系统进程开启多了后仍然会挂。后来使用objdump -x 后发现了原因有个动态库
    02-09
  • Linux命令总结--rm命令 linux的rmp命令
    (来源于http://www.cnblogs.com/xqzt/p/5398919.html)1、命令简介rm(Remove file 删除目录或文件)删除文件,对于链接文件,只是删除整个链接文件,而原有文件保持不变。新手在删除文件之前一定要知道这些:很重要1.可以用mv代替rm的绝对不要用rm,不要着急
    02-09
  • Linux命令行批量创建目录详解 linux创建目录
    以前一直用-p创建目录链,觉得很方便了。在空目录/opt/app/myapp里创建src,再创建main,再创建javamkdir -p /opt/app/myapp/src/main/java没想到还可以这样玩##¥%……*(root@vm1:~/tmp# mkdir -p src/{{main,test}/{java,resources},main/webapp}root@vm1:
    02-09
  • Linux命令之乐--script和scriptplay
    script和scriptplay可以把终端会话记录到一个文件中,可以用来制作命令行教学视屏。 开始录制会话[root@new test]# script -t 2timing.log -a output.sessionScript started, file is output.session[root@new test]# echo hellohello[root@new test]# echo
    02-09
  • java 开发常用的Linux命令
    1.查找文件 find / -name filename.txt 根据名称查找/目录下的filename.txt文件。find . -name "*.xml" 递归查找所有的xml文件find . -name "*.xml" |xargs grep "hello world" 递归查找所有文件内容中包含hello world的xml文件grep -H 'spring' *.xml 查找所
    02-09
  • 常用Linux命令整理 Linux常用命令总结
    常用Linux命令整理常见系统命令export 查看或修改环境变量# 例:临时修改命令提示符为字符串$export PS1=$# 例:临时修改命令提示符显示系统时间 时间使用\t 表示export PS1="[\u@\h \t \W]\$"man 查看linux系统的手册# 例:查看ls命令如何使用man ls # 回车
    02-09 Linux
  • linux命令行—《命令行快速入门》 linux常用命令csdn
    linux命令行—《命令行快速入门》 linux常用命
    pwd print working directory 打印工作目录hostname my computer's network name 电脑在网络中的名称mkdir make directory 创建路径cd change directory 改变路径ls list directory 列出路径下的内容rmdir remove directory 删除路径pushd push directory 推
    02-09
  • Linux命令(五) 五个常用的linux命令
    Linux命令(五) 五个常用的linux命令
    jenkins触发钉钉报警机制1、安装钉钉插件钉钉报警需要安装Ding Talk插件,支持钉钉报警2、打开钉钉创建钉钉机器人2.1选择机器人类型——自定义2.2添加机器人2.3填写机器人信息填写机器人姓名—设置安全设置为加密类型,并复制出来加密值2.4创建完成保持webhoo
    02-09
  • 03_Linux基础-文件类型-主辅提示符-第1提示符-Linux命令-内外部命令-快捷键-改为英文编码-3个时间-stat-其他基础命令
    03_Linux基础-文件类型-主辅提示符-第1提示符-L
    03_Linux基础-文件类型-主辅提示符-第1提示符-Linux命令-内外部命令-快捷键-改为英文编码-3个时间-stat-{1..100}-du-cd-cp-file-mv-echo-id-shell-ln-env-set-which-rpm-/usr-/与/root-hostname-vim-cat-pwd-alias-unalias-ls-ASCII-wc-chmod博客
    02-09
点击排行