网络管理

ifconfig - 查看IP地址

rpm -qf $(which ifconfig)
net-tools-2.0-0.25.20131004git.el7.x86_64

man ifconfig
ifconfig --help

w
ifconfig 显示所有网卡信息

[root@node4 ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.118  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::a00:27ff:fec3:7478  prefixlen 64  scopeid 0x20<link>
        inet6 2408:8207:7899:ae30:a00:27ff:fec3:7478  prefixlen 64  scopeid 0x0<global>
        ether 08:00:27:c3:74:78  txqueuelen 1000  (Ethernet)
        RX packets 356  bytes 32974 (32.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 222  bytes 31199 (30.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ifup - 激活网络接口

待补充 vim $(which ifup)

ifdown - 禁用网络接口

待补充 vim $(which ifdown)

route - 显示或管理路由表

# rpm -qf $(which ifconfig)
net-tools-2.0-0.25.20131004git.el7.x86_64

route    显示系统路由表
route -n 不解析域名,纯显示IP


[root@node4 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

Destination  网络号
Gateway      连出网关地址,也就是说该网络是通过该IP连接出去的,如果显示0.0.0.0,则表示该路由是直接由本机传送出去的。如果有IP显示,则表示本条路由必须经过该IP的转接才能连接出去。
Genmask      表示子网掩码地址,也就是netmask。Destination和Genmask将组合成一个完整的网络。
Flags        路由标记信息,通常会有下面几种不同的标记。
    U(route is up):表示此路由当前为启动状态。
    H(target is a host):目标路由是一个主机(IP)而非网络。
    R(reinstate route for dynamic routing):使用动态路由时,恢复路由信息标识。
    G(use gateway):表示需要通过外部的主机(gateway)来转接传递数据。
    M(modified from routing daemon or redirect):表示路由已经被修改了。
    D(dynamically installed by daemon or redirect):已经由服务设定为动态路由。
    !(reject route):这个路由将不会被接受(用来抵挡不安全的网络)。
Metric        需要经过几个网络节点(hops)才能到达路由的目标网络地址。
Ref           参考到此路由规则的数目。
Use           有几个转送数据包参考到了此路由规则。
Iface         路由对应的网络设备接口。


route -n
route del default
route -n
route add default gw 10.0.0.2
route del default gw 10.0.0.2
route add default gw 10.0.0.2 dev eth0

网关的配置文件 /etc/sysconifg/network-scripts/route-eth1  默认不存在此文件

arp - 管理系统的arp缓存

arp命令用于操作本机的arp缓存区,它可以显示arp缓存区中的所有条目、删除指定的条目或者添加静态的IP地址与MAC地址的对应关系。

什么是arp?即地址解析协议(ARP,Address Resolution Protocol),其主要功能是根据IP地址获取物理地址(MAC地址)。

[root@dp27m1 ~]# arp
Address                  HWtype  HWaddress           Flags Mask            Iface
cdh02.internal.chinaclo  ether   12:34:56:78:9a:bc   C                     eth0
oracle-sink.internal.ch  ether   12:34:56:78:9a:bc   C                     eth0
sqlserversink.internal.  ether   12:34:56:78:9a:bc   C                     eth0
kafka.internal.chinaclo  ether   12:34:56:78:9a:bc   C                     eth0
node3                    ether   12:34:56:78:9a:bc   C                     eth0
mdw.internal.chinacloud  ether   12:34:56:78:9a:bc   C                     eth0
gateway                  ether   12:34:56:78:9a:bc   C                     eth0
tidb-sink.internal.chin  ether   12:34:56:78:9a:bc   C                     eth0
[root@dp27m1 ~]# 
[root@dp27m1 ~]# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.2.15             ether   12:34:56:78:9a:bc   C                     eth0
192.168.2.9              ether   12:34:56:78:9a:bc   C                     eth0
192.168.2.11             ether   12:34:56:78:9a:bc   C                     eth0
192.168.2.20             ether   12:34:56:78:9a:bc   C                     eth0
192.168.2.27             ether   12:34:56:78:9a:bc   C                     eth0
192.168.2.5              ether   12:34:56:78:9a:bc   C                     eth0
192.168.2.1              ether   12:34:56:78:9a:bc   C                     eth0
192.168.2.13             ether   12:34:56:78:9a:bc   C                     eth0

ip - 网络配置工具

ip命令是iproute软件包中的一个强大的网络配置工具,用于显示或管理Linux系统的路由、网络设备、策略路由和隧道。

rpm -qf $(which ip)
rpm -ql $(rpm -qf $(which ip))

CentOS7开始推广ip命令,用于替代传统的ifconfig和route命令


[root@dp27m1 ~]# ip --help
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
       ip [ -force ] -batch filename
where  OBJECT := { link | address | addrlabel | route | rule | neigh | ntable |
                   tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm |
                   netns | l2tp | fou | macsec | tcp_metrics | token | netconf | ila |
                   vrf }
       OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |
                    -h[uman-readable] | -iec |
                    -f[amily] { inet | inet6 | ipx | dnet | mpls | bridge | link } |
                    -4 | -6 | -I | -D | -B | -0 |
                    -l[oops] { maximum-addr-flush-attempts } | -br[ief] |
                    -o[neline] | -t[imestamp] | -ts[hort] | -b[atch] [filename] |
                    -rc[vbuf] [size] | -n[etns] name | -a[ll] | -c[olor]}

ip address help
ip route  help


显示网络信息
ip address
ip link

显示网络设备属性
ip link show dev eth0
ip -s link show dev eth0

关闭和激活网络设备
ip link show dev eth0
ip link set eth1 up
ip link set eth1 down

修改网卡的MAC地址
ip link set eth0 address 12:34:56:78:9a:bc

添加或删除IP地址
ip address add 172.16.1.12/24 dev eth1
ip address show eth1
ip link set eth1 up
ip address show eth1
ip address 172.16.1.13/24 dev eth1
ip address del 172.16.1.12/24 dev eth1
ip address show eth1
删除网卡的主IP地址  同时会删除该网卡的所有IP地址
删除网卡的辅助IP地址(虚拟IP) 不会影响该网卡的其它IP地址


查看路由表
ip route | column -t

添加除路由表
ip route add 10.1.0.0/24 via 10.0.0.253 dev eth0
删除路由表
ip route del 10.1.0.0/24

查看ARP缓存
ip neighbour
添加静态ARP项
ip neighbour add 192.168.1.100 lladdr 12:34:56:78:9a:bc dev eth0
删除静态ARP项
ip neighbour del 192.168.1.100 dev eth0

删除网络设备
ip link delete { DEVICE | dev DEVICE | group DEVGROUP } type TYPE [ ARGS ]
ip link delete wg0

netstat - 查看本机端口监听状态

[root@dp27m1 ~]# rpm -qf $(which netstat)
net-tools-2.0-0.25.20131004git.el7.x86_64

netstat --help
man netstat 

netstat -an

对上图字段对一些解释
Proto            socket使用的协议,TCP、UDP、RAW
Recv-Q           接收到但是还未处理的字节数
Send-Q           已经发送但是未被远程主机确认收到的字节数
Local Address    本地主机的地址和端口
Foreign Address  远程主机的地址和端口
State            socket的状态,通常仅仅TCP的状态,状态的可能值有
    ESTABLISHED  已经建立连接
    SYN_SENT     
    SYN_RECV
    FIN_WAIT1
    FIN_WAIT2
    TIME_WAIT
    CLOSED
    CLOSE_WAIT
    LAST_ACK
    LISTEN
    CLOSING
    UNKNOWN

https://www.cnblogs.com/huangjianping/p/8012405.html

netstat --help
netstat -lntup            查看系统监听了哪些端口常用
netstat -lntup | grep 80  检查系统是否监听了80端口
netstat -rn               显示路由表
netstat -i | column -t    显示网络接口状况

统计TCP的各个状态数
netstat -nat | awk '{print $6}' | sort | uniq -c | sort -rn

查找80端口请求数最高的前20个IP
netstat -anlp | grep 80 | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | head

ss - 查看网络状态

ss --help
[root@dp27m1 ~]# rpm -qf $(which ss)
iproute-4.11.0-25.el7_7.2.x86_64
man ss
ss 与 netstat 的功能类似,有时候系统里没有内置netstat,就用这个

ss -an
ss -an | column -t
ss -lntup
ss -s

ping - 测试主机之间网络的连通性

ping命令可用于测试主机之间网络的连通性。执行ping命令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而可得知该主机运作正常

ping baidu.com    (CTRL+C  强制终止)
ping baidu.com | awk '{print $0  "   " strftime("%Y-%m-%d %H:%M:%S", systime())}'

一共ping 3次, 每次间隔3秒
ping -c 3 -i 3 jd.com


利用awk打出时间,查看网络延时
ping baidu.com | awk '{print $0  "   " strftime("%Y-%m-%d %H:%M:%S", systime())}'

traceroute - 追踪数据传输路由状况

[root@dp27m1 ~]# rpm -qf $(which traceroute)
traceroute-2.0.22-2.el7.x86_64

[root@dp27m1 ~]# traceroute -I -n 192.168.2.25
traceroute to 192.168.2.25 (192.168.2.25), 30 hops max, 60 byte packets
 1  192.168.2.25  0.051 ms  0.006 ms  0.005 ms

arping - 发送arp请求

[root@dp27m1 ~]# rpm -qf $(which arping)
iputils-20160308-10.el7.x86_64

telnet - 远程登陆主机

telnet命令以前是用于登录远程主机,对远程主机进行管理的。但是因为telnet是采用明文传送报文的,其安全性不好,因此现在很多Linux服务器都不开放telnet服务,而是改用更安全的SSH服务了。当然,交换机等网络设备还是会采用telnet登录的方式。现在使用telnet命令的场景主要是判断远端服务器的端口是否开放。

[root@dp27m1 ~]# rpm -qf $(which telnet)
telnet-0.17-64.el7.x86_64

可以正常连通的场景
[root@dp27m1 ~]# echo q | telnet baidu.com 80
Trying 220.181.38.148...
Connected to baidu.com.
Escape character is '^]'.
Connection closed by foreign host.

telnet baidu.com 80
Ctrl + ] ,之后输入quit退出

无法连通的场景
[root@dp27m1 ~]# echo q | telnet baidu.com 22
Trying 39.156.69.79...
telnet: connect to address 39.156.69.79: Connection timed out
Trying 220.181.38.148...
telnet: connect to address 220.181.38.148: Connection timed out

nc - 多功能网络工具

yum install nc   OR yum install 
yum install nmap-ncat
[root@xingyongsheng ~]# rpm -qf $(which nc)
nmap-ncat-6.40-19.el7.x86_64

nc --help

查看某个端口是否监听

nc -zv baidu.com 80

在 CentOS7 下行结果
[root@xingyongsheng ~]# nc -zv baidu.com 80
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 39.156.69.79:80.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.

在 Mac OS X 下的执行结果
localhost:~ ndps$ nc -zv baidu.com 80
Connection to baidu.com port 80 [tcp/http] succeeded!

如果端口不通,将会卡住好一会,直到提示超时,此时我们可以引入超时参数,快速检查,这种操作尤其适合我们书写脚本时
[root@xingyongsheng ~]# nc -zv -w 3 baidu.com 22
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connection to 39.156.69.79 failed: Connection timed out.
Ncat: Trying next address...
Ncat: Connection timed out.
[root@xingyongsheng ~]# echo $?
1
[root@xingyongsheng ~]# nc -zv -w 3 baidu.com 80
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 220.181.38.148:80.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
[root@xingyongsheng ~]# echo $?
0

查看某个端口是否能正常访问

有时候我们会遇到这样的场景,比如启动一个nginx监听80端口,在本地curl,telnet端口之类的都OK,但是离开本机到浏览器上访问就不行了,此时大概率就是网络限制,防火墙,安全组之类的问题了,但是有些时候别人要说,你这是服务的问题吧,是不是服务没起来,吧啦吧啦。。。

或者反之,别人服务有问题访问不了,但是就是想把锅甩到端口限制上,此时我们可以借助nc命令在服务器上监听一个端口,然后访问

在服务器上执行nc --listen 7777,ORnc -vvlnp 2222此时服务器已经挂起并把7777端口监听起来了,我们可以再开一个窗口检查下7777端口是否已经监听了,如下

[root@ip-172-31-42-40 ~]# netstat -lntup | grep 7777
tcp        0      0 0.0.0.0:7777            0.0.0.0:*               LISTEN      837/nc              
tcp6       0      0 :::7777                 :::*                    LISTEN      837/nc 

这个时候我们就可以在本地检查端口是否打通,windows上是可以开启telnet命令功能的,MAC OS X 上则自带nc命令,也可以直接到浏览器上访问7777端口,服务器上会刷新内容,如下

这样我们就可以完全确认本地到服务器的7777端口是完全通的

远程通信(传输TXT文本)

如果服务器没网,不知道SSH密码,传文件的方式又比较麻烦的话,可以考虑利用nc命令,与服务器建立一个聊天窗口,实现数据交换的功能,如下

MAC OS X 上自带nc命令,Windows 10 可以利用WSL(Windows Subsystem for Linux)来安装nc命令

我们还可以利用nc命令,配合重定向,实现往服务器上上传文本文件

  1. 在需要服务器上监听好端口 nc --listen 7777 > /root/xhello.txt
  2. 在本地准备好文件,上传到服务器上 nc aws.as4k.top 7777 < /root/hello.txt

nslookup - 域名查询工具

[root@dp27m1 ~]# rpm -qf $(which nslookup)
bind-utils-9.11.4-9.P2.el7.x86_64

直接查询
nslookup aws.as4k.top

指定解析的DNS服务器
nslookup aws.as4k.top 223.5.5.5


[root@dp27m1 ~]# nslookup baidu.com
Server:		168.63.129.16
Address:	168.63.129.16#53

Non-authoritative answer:
Name:	baidu.com
Address: 39.156.69.79
Name:	baidu.com
Address: 220.181.38.148

[root@dp27m1 ~]# nslookup baidu.com 223.5.5.5
Server:		223.5.5.5
Address:	223.5.5.5#53

Non-authoritative answer:
Name:	baidu.com
Address: 39.156.69.79
Name:	baidu.com
Address: 220.181.38.148

dig - 域名查询工具

[root@dp27m1 ~]# rpm -qf $(which dig)
bind-utils-9.11.4-9.P2.el7.x86_64

[root@dp27m1 ~]# dig baidu.com

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

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
; OPT=65436: 82 d5 0d e1 8f f2 9d 40 af a2 82 17 84 e6 fa cc (".......@........")
;; QUESTION SECTION:
;baidu.com.			IN	A

;; ANSWER SECTION:
baidu.com.		282	IN	A	220.181.38.148
baidu.com.		282	IN	A	39.156.69.79

;; Query time: 1 msec
;; SERVER: 168.63.129.16#53(168.63.129.16)
;; WHEN: Fri Mar 20 03:53:08 UTC 2020
;; MSG SIZE  rcvd: 90

[root@dp27m1 ~]# 
[root@dp27m1 ~]# 
[root@dp27m1 ~]# dig as4k.top

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> as4k.top
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29855
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
; OPT=65436: 82 d5 0d e1 8f f2 9d 40 af a2 82 17 84 e6 fa cc (".......@........")
;; QUESTION SECTION:
;as4k.top.			IN	A

;; ANSWER SECTION:
as4k.top.		358	IN	A	47.95.237.44

;; Query time: 1 msec
;; SERVER: 168.63.129.16#53(168.63.129.16)
;; WHEN: Fri Mar 20 03:53:14 UTC 2020
;; MSG SIZE  rcvd: 73

host - 域名查询工具

[root@dp27m1 ~]# host baidu.com
baidu.com has address 39.156.69.79
baidu.com has address 220.181.38.148
baidu.com mail is handled by 20 mx1.baidu.com.
baidu.com mail is handled by 20 jpmx.baidu.com.
baidu.com mail is handled by 20 mx50.baidu.com.
baidu.com mail is handled by 10 mx.maillb.baidu.com.
baidu.com mail is handled by 15 mx.n.shifen.com.
[root@dp27m1 ~]# host as4k.top
as4k.top has address 47.95.237.44

nmap - 端口扫描器

[root@dp27m1 ~]# rpm -qf $(which nmap)
nmap-6.40-19.el7.x86_64


nmap命令是一款开放源代码的网络探测和安全审核工具,是Network Mapper的缩写。其设计目标是快速地扫描大型网络。nmap可以发现网络上有哪些主机,主机提供了什么服务(应用程序名称和版本号),并探测操作系统的类型及版本信息。


扫描指定机器开放了哪些端口
nmap -p 1-1000 baidu.com 

扫描局域网内所有的IP
nmap 192.168.2.0/24

探测目标主机操作系统版本
nmap -O -sV baidu.com

tcpdump - 监听网络流量

tcpdump是Linux自带的抓包工具,可以详细看到计算机通信中详细报文内容,如果读者熟悉另一款  
强大的抓包工具wireshark,tcpdump相当于是wireshark的命令行版本。dump这个单词有垃圾堆,  
倒垃圾的意思,在计算机英语中的含义是转存。  

tcpdump官网:http://www.tcpdump.org/  
This is the official web site of tcpdump, a powerful command-line packet analyzer;  

查看本机tcpdump的版本  

    [root@as4k html]# tcpdump --version  
    tcpdump version 4.1-PRE-CVS_2017_03_21  

tcpdump的最新版本  
Version: 4.9.2  
Release Date: September 3, 2017  

官方文档:http://www.tcpdump.org/manpages/tcpdump.1.html,此文档无疑是全网最详细,最权威  
的教程,很多大牛的博客都有借鉴此文的内容。  



[root@dp27m1 ~]# rpm -qf $(which tcpdump)
tcpdump-4.9.2-4.el7_7.1.x86_64

tcpdump --help
man tcpdump


[root@dp27m1 ~]# tcpdump --help
tcpdump version 4.9.2
libpcap version 1.5.3
OpenSSL 1.0.2k-fips  26 Jan 2017
Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ]
		[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
		[ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ]
		[ -Q|-P in|out|inout ]
		[ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ]
		[ --immediate-mode ] [ -T type ] [ --version ] [ -V file ]
		[ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ]
		[ -Z user ] [ expression ]

-c count                 接收到指定数据包之后退出
-i interface             指定要抓取的网络接口,比如eth0
-n                       不进行DNS解析,显示IP地址
-nn                      不将协议和端口数字等转换成名字
-q                       显示精简信息
-vvv                     显示详细信息

抓取本机指定网卡的全部包
tcpdump -c 10 -i eth0 -nn

抓取本机与baidu.com之间的通信
tcpdump -c 20 -n host baidu.com

抓取baidu.com发送到本机的数据
tcpdump -c 5 -n src host baidu.com

抓取本机发送到baidu.com的流量
tcpdump -c 5 -n dst host baidu.com

监听指定端口的数据包
tcpdump -nn -c 10 -i eth0 port 22

监听指定协议的数据包
tcpdump -n arp
tcpdump -n icmp

参考资料

官方权威教程  
http://www.tcpdump.org/manpages/tcpdump.1.html  

漫画形式介绍tcpdump,非常有趣  
https://jvns.ca/zines/#tcpdump