PHP工程师必知必会 - Linux系统常用命令 - Linux中的网络管理命令(下)


Linux中的网络管理命令(上)

网络连接

主要涉及到对网络连接状态的统计,比如连接打开了哪些端口、TCP/UDP、socket 的状态是什么等等。常用的工具有 netstat、 ss、lsof、 netcat等。

netstat ★★★

netstat 用于查看当前网络的连接情况,能够查看所有的网络连接,包括 unix socket 等,也是集多种工具于一身的组合工具。最常用的就是用来查看本地端口占用情况

语法

netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]

参数

  • -a或--all 显示所有连线中的Socket。
  • -A<网络类型>或--<网络类型> 列出该网络类型连线中的相关地址。
  • -c或--continuous 持续列出网络状态。
  • -C或--cache 显示路由器配置的快取信息。
  • -e或--extend 显示网络其他相关信息。
  • -F或--fib 显示FIB。
  • -g或--groups 显示多重广播功能群组组员名单。
  • -h或--help 在线帮助。
  • -i或--interfaces 显示网络接口信息
  • -l或--listening 列出监听中的服务器的Socket。
  • -M或--masquerade 显示伪装的网络连线。
  • -n或--numeric 直接使用IP地址,而不通过域名服务器。
  • -N或--netlink或--symbolic 显示网络硬件外围设备的符号连接名称。
  • -o或--timers 显示计时器。
  • -p或--programs 显示正在使用Socket的程序识别码和程序名称。
  • -r或--route 显示路由表信息
  • -s或--statistics 显示所有网络协议栈信息
  • -t或--tcp 列出监听 TCP 端口的 socket
  • -u或--udp 列出监听 UDP 端口的 socket
  • -v或--verbose 显示指令执行过程。
  • -V或--version 显示版本信息。
  • -w或--raw 显示RAW传输协议的连线状况。
  • -x或--unix 列出监听 UNIX 端口的 socket
  • --ip或--inet 此参数的效果和指定"-A inet"参数相同。

实际使用时往往多参数配合使用,比如:

netstat -ap | grep ssh 找出程序运行的端口
netstat -an | grep ':80' 找出运行在指定端口的进程

实例

# 显示UDP端口号的使用情况
$ netstat -apu
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
udp        0      0 tttti.testt.com:ntp         *:*                                     -
udp        0      0 localhost:ntp               *:*                                     -
udp        0      0 *:ntp                       *:*                                     -
udp        0      0 tttti.testt.com:33020       192.168.0.2:domain          ESTABLISHED 9325/nginx
udp        0      0 tttti.testt.com:48541       192.168.0.2:domain          ESTABLISHED 9323/nginx
udp        0      0 tttti.testt.com:57262       192.168.0.2:domain          ESTABLISHED 9326/nginx
udp        0      0 *:bootpc                    *:*                                     -
udp        0      0 *:59096                     *:*                                     -
udp        0      0 tttti.testt.com:41434       192.168.0.2:domain          ESTABLISHED 9324/nginx
udp        0      0 fe80::f816:3eff:fe5b:9a1:ntp *:*                                     -
udp        0      0 localhost:ntp               *:*                                     -
udp        0      0 *:ntp                       *:*                                     -
udp        0      0 *:36861                     *:*                                     -

ss ★★

ss 是 Socket Statistics 的缩写。ss 和 netstat 类似,可以用来获取 socket 统计信息,甚至显示更多连接状态信息。

ss 最大的优势在于比 netstat 更快。当服务器的 socket 连接数量变得非常大时,无论是使用 netstat 命令还是直接 cat /proc/net/tcp,执行速度都会很慢。ss 命令利用到了 TCP 协议栈中的一个用于分析统计的模块——tcp_diag,使其可以获得 Linux 内核中第一手的信息,因此 ss 命令的性能会好很多。

语法

ss [参数] [过滤]

常用参数:

  • -t, --tcp 显示 TCP 协议的 sockets
  • -u, --udp 显示 UDP 协议的 sockets
  • -x, --unix 显示 unix domain sockets,与 -f 选项相同
  • -n, --numeric 不解析服务的名称,如 "22" 端口不会显示成 "ssh"
  • -l, --listening 查看处于LISTEN状态的连接端口
  • -p, --processes 显示监听端口的进程(Ubuntu 上需要 sudo)
  • -a, --all 对 TCP 协议来说,既包含监听的端口,也包含建立的连接
  • -r, --resolve 把 IP 解释为域名,把端口号解释为协议名称

实例

$ ss -ntlp|grep php
State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port
LISTEN     0      128               127.0.0.1:9000                     *:*      users:(("php-fpm",2487,7),("php-fpm",13519,0),("php-fpm",27405,0))
LISTEN     0      128               127.0.0.1:9007                     *:*      users:(("php-fpm",28800,0),("php-fpm",28801,0),("php-fpm",28802,0),("php-fpm",28803,0))
LISTEN     0      128               127.0.0.1:9009                     *:*      users:(("php-fpm",568,7),("php-fpm",6849,0),("php-fpm",9821,0),("php-fpm",16103,0))

lsof ★★

lsof 可以列出当前系统打开文件、打开文件的进程、进程打开的端口。由于在 Linux 中一切皆文件,所以, lsof 也常用来统计网络相关的文件信息(使用 -i 选项),如 TCP/UDP/Unix socket 的统计信息。

语法

lsof [参数] [文件]

常用参数:

  • -a 列出打开文件存在的进程
  • -c <进程名> 列出指定进程所打开的文件
  • -g 列出GID号进程详情
  • -d <文件号> 列出占用该文件号的进程
  • +d <目录> 列出目录下被打开的文件
  • +D <目录> 递归列出目录下被打开的文件
  • -n <目录> 列出使用NFS的文件
  • -i <条件> 列出符合条件的进程
  • -p <进程号> 列出指定进程号所打开的文件
  • -u 列出UID号进程详情
  • -h 显示帮助信息
  • -v 显示版本信息

实例

使用 lsof 来查看当前系统中 80 端口是否被占用

sudo lsof -i tcp:80
COMMAND     PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
docker-pr 14863 root    4u  IPv6 38693061      0t0  TCP *:http (LISTEN)

然后获取到 PID 之后可以用 lsof 来查看进程

sudo lsof -p 14863
COMMAND     PID USER   FD      TYPE   DEVICE SIZE/OFF       NODE NAME
docker-pr 14863 root  cwd       DIR      8,0     4096          2 /
docker-pr 14863 root  rtd       DIR      8,0     4096          2 /
docker-pr 14863 root  txt       REG      8,0  3329080      17531 /usr/bin/docker-proxy
docker-pr 14863 root  mem       REG      8,0  1868984      20743 /lib/x86_64-linux-gnu/libc-2.23.so
docker-pr 14863 root  mem       REG      8,0   138696      11625 /lib/x86_64-linux-gnu/libpthread-2.23.so
docker-pr 14863 root  mem       REG      8,0   162632      10738 /lib/x86_64-linux-gnu/ld-2.23.so
docker-pr 14863 root    0r      CHR      1,3      0t0       8085 /dev/null
docker-pr 14863 root    1w      CHR      1,3      0t0       8085 /dev/null
docker-pr 14863 root    2w      CHR      1,3      0t0       8085 /dev/null
docker-pr 14863 root    4u     IPv6 38693061      0t0        TCP *:http (LISTEN)
docker-pr 14863 root    5u  a_inode     0,12        0       8082 [eventpoll]
docker-pr 14863 root   12r      REG      0,3        0 4026531993 net

由以上的信息就能看出来我的机器中的 80 端口是 docker 占用的,docker 的位置在系统中的 /usr/bin/docker-proxy

lsof 输出各列信息的意义如下:

  • COMMAND:进程的名称
  • PID:进程标识符
  • PPID:父进程标识符(需要指定 -R 参数)
  • USER:进程所有者
  • PGID:进程所属组
  • FD:文件描述符,应用程序通过文件描述符识别该文件。如 cwd、txt 等

FD 的取值

  • cwd:表示 current work dirctory,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改
  • txt :该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序
  • lnn:library references (AIX);
  • er:FD information error (see NAME column);
  • jld:jail directory (FreeBSD);
  • ltx:shared library text (code and data);
  • mxx :hex memory-mapped type number xx.
  • m86:DOS Merge mapped file;
  • mem:memory-mapped file;
  • mmap:memory-mapped device;
  • pd:parent directory;
  • rtd:root directory;
  • tr:kernel trace file (OpenBSD);
  • v86 VP/ix mapped file;
  • 0:表示标准输出
  • 1:表示标准输入
  • 2:表示标准错误

一般在标准输出、标准错误、标准输入后还跟着文件状态模式:r、w、u 等

  • u:表示该文件被打开并处于读取 / 写入模式
  • r:表示该文件被打开并处于只读模式
  • w:表示该文件被打开并处于
  • 空格:表示该文件的状态模式为 unknow,且没有锁定
  • -:表示该文件的状态模式为 unknow,且被锁定

netcat(nc) ★★★

nc 被称为瑞士军刀,非常轻巧但功能强大,能够创建各种不同类型的网络连接、能够实现简单的聊天工具、远程传输文件、debug 分析、扫描端口等。

语法

nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>][-s<来源位址>][-v...][-w<超时秒数>][主机名称][通信端口...]

参数说明:

  • -g<网关> 设置路由器跃程通信网关,最多可设置8个。
  • -G<指向器数目> 设置来源路由指向器,其数值为4的倍数。
  • -h 在线帮助。
  • -i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。
  • -l 使用监听模式,管控传入的资料。
  • -n 直接使用IP地址,而不通过域名服务器。
  • -o<输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。
  • -p<通信端口> 设置本地主机使用的通信端口。
  • -r 乱数指定本地与远端主机的通信端口。
  • -s<来源位址> 设置本地主机送出数据包的IP地址。
  • -u 使用UDP传输协议。
  • -v 显示指令执行过程。
  • -w<超时秒数> 设置等待连线的时间。
  • -z 使用0输入/输出模式,只在扫描通信端口时使用。

实例

# TCP端口扫描
# nc -v -z -w2 192.168.0.3 1-100 
192.168.0.3: inverse host lookup failed: Unknown host
(UNKNOWN) [192.168.0.3] 80 (http) open
(UNKNOWN) [192.168.0.3] 23 (telnet) open
(UNKNOWN) [192.168.0.3] 22 (ssh) open

# 扫描UDP端口
# nc -u -z -w2 192.168.0.1 1-1000 //扫描192.168.0.3 的端口 范围是 1-1000

# 扫描80端口
# nc -nvv 192.168.3.1 80

流量统计

ifstat ★★★

ifstat 主要用来监测主机网口的网络流量,常用的选项包括:

  • -a:监测主机所有网口
  • -i:指定要监测的网口
  • -t:在每行输出信息前加上时间戳
  • -b:以 Kbit/s 显示流量数据,而不是默认的 KB/s
  • delay:采样间隔(单位是 s),即每隔 delay 的时间输出一次统计信息
  • count:采样次数,即共输出 count 次统计信息
  • -p:优化打印
  • -e:显示错误信息
  • -r:重置历史记录

sar ★★

sar是System Activity Reporter(系统活动情况报告)的缩写。sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据;取样数据和分析的结果都可以存入文件,所需的负载很小。

sar是目前Linux上最为全面的系统性能分析工具之一,可以从14个大方面对系统的活动进行报告,包括 CPU、内存、磁盘 I/O、网络、进程、系统调用等等信息。

常用参数:

  • -R 显示内存状态
  • -b 显示I/O速率
  • -B 显示换页状态
  • -d 显示每个块设备的状态
  • -i 状态信息刷新的间隔时间
  • -u 显示CPU利用率

网络信息通常使用 -n参数来统计,常用几个选项如下:

  • -n DEV:网络接口统计信息。
  • -n EDEV:网络接口错误。
  • -n IP:IP 数据报统计信息。
  • -n EIP:IP 错误统计信息。
  • -n TCP:TCP 统计信息。
  • -n ETCP:TCP 错误统计信息。
  • -n SOCK:套接字使用。

iftop ★★★

iftop是一款实时流量监控工具,监控TCP/IP连接等,缺点就是无报表功能。必须以root身份才能运行。

参数

  • -i 指定要监控的网卡
  • -n 直接显示IP, 不进行DNS反解析

实例

# 默认监控第一块网卡的流量:
[root@linuxcool ~]# iftop 

# 监控eth1网卡的流量:
[root@linuxcool ~]# iftop eth1

# 直接显示IP, 不进行DNS反解析:
[root@linuxcool ~]# iftop -n

交换与路由

arp ★★

用来管理主机的 ARP 缓存,增删查改等。

常见用法:

  • arp:显示 ARP 缓存所有记录
  • arp -i :显示指定接口的 ARP 缓存记录
  • arp -d :删除指定主机的 ARP 缓存记录
  • arp -s <硬件地址>:添加 ARP 缓存静态项

arping ★★

查看本 LAN 内 IP 对应的主机 MAC 地址,以及 MAC 的占用问题。

arping命令作用是使用arp数据包,通过ping命令检查来测试网络。arping命令能够测试一个ip地址是否是在网络上已经被使用,并能够获取更多设备信息。功能类似于ping。

由于arping命令基于ARP广播机制,所以arping命令只能测试同一网段或子网的网络主机的连通性,ping命令则是基于ICMP协议,是可以路由的,所以使用ping命令可以测试任意网段的主机网络连通性。

vconfig ★★

vconfig命令是 vlan 的配置命令。

比如给某个接口增加两个 vlan :

vconfig add eth0 100
vconfig add eth0 200

删除 vlan :

vconfig rem eth0.100
vconfig rem eth0.200

route ★★

route 用来查看和修改路由表,同样工具还有 netstat-r 和 ip route。

  • route-n 查看路由表
  • route add/del 增加/删除路由表

比如添加一条默认路由:

route add default gw 192.168.1.1 dev eth0

防火墙

iptables ★★★

iptables 是强大的包过滤工具。 iptables 通过一系列规则来过滤、处理数据包,能够实现防火墙、NAT等功能。

ipatbles 命令仅仅是用户空间的linux内核防火墙管理工具,真正的功能实现是由linux内核模块实现的。在配置服务器策略前必须加载相应的内核模块。

ipatbles命令仅支持ipv4,如果使用的IP协议是ipv6则需要使用专门的管理工具ip6tables。

参数

  • -t<表> 指定要操纵的表
  • -A 向规则链中追加条目
  • -D 从规则链中删除条目
  • -I 向规则链中插入条目
  • -R 替换规则链中的相应条目
  • -L 显示规则链中的已有条目
  • -F 清除规则链中的现有条目。不改变规则链的默认目标策略
  • -Z 清空规则链中的数据包计数器和字节计数器
  • -N 创建新的用户自定义规则链
  • -P 定义规则链中的默认目标(策略)
  • -h 显示帮助信息
  • -p<协议> 指定要匹配的数据包的协议类型
  • -s<源地址> 指定要匹配的数据包的源IP地址
  • -j<目标> 指定要跳转的目标
  • -i<网络接口> 指定数据包进入本机的网络接口
  • -o<网络接口> 指定数据包离开本机做使用的网络接口
  • -c<包计数> 在执行插入、追加和替换操作时初始化包计数器和字节计数器

实例

# 显示内核当前的filter表
[root@linuxcool ~]# iptables -L

# 显示内核当前的nat表
[root@linuxcool ~]# iptables -L -t nat

# 禁止本机对192.168.20.20地址的访问
[root@linuxcool ~]# iptables -t filter -A OUTPUT -d 192.168.20.20 -j DROP

# 显示filter表的OUTPUT链
[root@linuxcool ~]# iptables -L OUTPUT -t filter

ipset

ipset 是一个辅助 iptables 的工具,通常用在限制多个 IP 的场景下,使用 ipset,可以将多个 IP 放入一个集合,然后 iptables 针对这个集合做限制,这样可以大大提高效率。 ipset除了可以集合 IP 外,还可以集合 网段、MAC、端口、网卡等。

常用操作比如:

创建一个 ipset:

ipset create blacklist hash:ip
  • blackliset 是集合名称
  • hash 是存储类型,还支持 bitmap、list 等
  • ip 是存储类型,可以是 MAC、端口等

往集合中增加项:

ipset add blacklist 192.168.10.2

从集合中移除项:

ipset del blacklist 192.168.10.2

还可以指定超时时间限制:

ipset create blacklist hash:net timeout 60

域名相关

host

host 命令是域名分析查询工具,用来测试域名系统工作是否正常。

比如查看百度域名信息:

[root@by ~] host www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 14.215.177.38
www.a.shifen.com has address 14.215.177.39

nslookup

nslookup 用于交互式域名解析,查看域名解析是否正常,在网络故障的时候用来诊断网络问题。

查看 google.com 的 DNS 地址:

# nslookup google.com
Server:        8.8.8.8
Address:    8.8.8.8#53

Name:    google.com
Address: 172.217.160.110

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

[root@by ~]# nslookup
> server
Default server: 8.8.8.8
Address: 8.8.8.8#53
Default server: 8.8.4.4
Address: 8.8.4.4#53

dig

dig命令的全称是“domain information groper”,它是一个用来灵活查询DNS的工具,它会打印出DNS域名服务器的回应,dig命令主要用来从DNS域名服务器查询主机地址信息。

dig命令与nslookup命令功能基本相同,但是dig命令灵活性好、易用、输出清晰。

参数:

  • @ 指定进行域名解析的域名服务器
  • -b 使用指定的本机ip地址向域名服务器发送域名查询请求
  • -f 指定dig以批处理的方式运行,指定的文件中保存着需要批处理查询的DNS任务信息
  • -p 指定域名服务器所使用端口号
  • -t 指定要查询的DNS数据类型(默认为A)
  • -x 执行逆向域名查询
  • -4 使用ipv4(默认)
  • -6 使用ipv6
  • -h 显示命令帮助信息

实例

# 查询对应域名的ip
[root@linuxcool ~]# dig www.linuxcool.com

# 对目标ip进行反向解析查询
[root@linuxcool ~]# dig -x 166.111.4.100

# 查询目标域名的MX记录
[root@linuxcool ~]# dig -t MX chinacion.cn

whois

whois 用于查看域名所有者的信息,比如注册邮箱、手机号码、域名服务商等。

Domain Name: chinacion.cn
ROID: 20160314s10001s82632400-cn
Domain Status: clientTransferProhibited
Registrant: 张三
Registrant Contact Email: zhangsan@qq.com
Sponsoring Registrar: 北京新网数码信息技术有限公司
Name Server: f1g1ns1.dnspod.net
Name Server: f1g1ns2.dnspod.net
Registration Time: 2016-03-14 10:32:39
Expiration Time: 2021-03-14 10:32:39
DNSSEC: unsigned

比如,chinacion.cn 这个域名是张三2016年在新网注册的,注册邮箱是 zhangsan@qq.com。

本文发表于2020年07月14日 18:14
阅读 577 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

一直到现在我才突然明白,我梦寐以求,是真爱和自由。

把爱情留给我身边最真心的姑娘,你陪我歌唱陪我流浪,陪我两败俱伤。

把青春献给身后那座辉煌的都市,为了这个美梦,我们付出着代价。

又是一年五一,祝我们工人阶级劳动节快乐! 今年被困在北京了,离境再入境需要隔离十五天。只能京津冀周边走一走了,想出去玩啊啊啊啊啊~

人活一辈子,不是一年两年。时间是有连续性的,做抉择的时候要多看几步。保持警惕,大丈夫有所为,有所不为。

快捷链接
网站地图
提交友链
Copyright © 2016 - 2020 Cion.
All Rights Reserved.
ICP备案:鲁ICP备19012333号-4.

鲁公网安备 37061302000383号.