网络相关命令

本文最后更新于:2023年12月5日 晚上

nc

netcat,命令 nc 或 ncat,功能强大的网络工具,网络界的瑞士军刀

ncat|nc [OPTIONS...] [hostname] [port]

-l port    # 启动一个服务器,监听端口号,不能监听已经被占用的端口号

示例:

[root@centos8 ~]# hostname -I
10.0.0.100
[root@centos8 ~]# nc -l 9501 # 建立服务端,监听本机的9501端口号
hello

[root@centos7 ~]# nc 10.0.0.100 9501 # 建立客户端,给10.0.0.100 9501发消息
hello

ss

ss 命令用于显示网络状态,利用 ss 可以让你得知整个 Linux 的网络情况

ss 来自于 iproute 包,代替 netstat,netstat 通过遍历 /proc来获取 socket 信息,主要是/proc/net/tcp/proc/net/tcp6 ,ss 使用 netlink 与内核 tcp_diag 模块通信获取 socket 信息,更加高效

一般来说,网络套接字是由 IP 地址,传输协议和端口来定义的。不过需要说明的是套接字不是连接本身,而是连接的端点之一

ss [ OPTIONS ] [ FILTER ]

默认情况下,如果我们运行ss命令而没有指定其他选项,它将显示所有已建立连接的打开的非侦听套接字的列表

OPTIONS:

-t    # 只显示TCP套接字。当与$(-l)结合只打印出监听套接字时,我们可以看到所有在TCP上侦听的内容。
-u    # 仅显示UDP套接字。由于UDP是一种无连接的协议,因此只运行$(-u)选项将不显示输出,我们可以将它与$(-a)或$(-l)选项结合使用,来查看所有侦听UDP套接字
-w    # 裸套接字相关
-x    # unix sock相关
-l    # 列出当前正在被监听的套接字
-a    # 不加l参数和加l参数的合集
-n    # 数字格式
-p    # 相关的程序及PID
-e    # 扩展的信息
-m    # 内存用量
-o    # 计时器信息

-l 示例:查看已经被使用的端口,使用 nc -l 尝试监听 9501 端口,报错提示已经被占用了

[root@4710419222 ~]# ss -ntl
State      Recv-Q Send-Q       Local Address:Port       Peer Address:Port
LISTEN     0      511              127.0.0.1:6379                  *:*
LISTEN     0      128                      *:111                   *:*
LISTEN     0      511                      *:80                    *:*
LISTEN     0      128                      *:46837                 *:*
LISTEN     0      128                      *:22                    *:*
LISTEN     0      511                      *:443                   *:*
LISTEN     0      512                      *:9501                  *:*
LISTEN     0      512                      *:9502                  *:*
LISTEN     0      511                      *:8000                  *:*
LISTEN     0      300                      *:3306                  *:*
LISTEN     0      7                        *:3690                  *:*
LISTEN     0      128                     :::111                  :::*
LISTEN     0      128                     :::58750                :::*
[root@4710419222 ~]# nc -l 9501
Ncat: bind to 0.0.0.0:9501: Address already in use. QUITTING.

FILTER

FILTER : [ state TCP-STATE ] [ EXPRESSION ]

state TCP-STATE:

LISTEN       # 监听
ESTABLISHED  # 已建立的连接
FIN_WAIT_1
FIN_WAIT_2
SYN_SENT
SYN_RECV
CLOSED

EXPRESSION :

dport =
sport =

常用组合:-nt -ntl -nta -ntal -ntalp -ntlp -nua -ntu -ntul

示例:

ss -l                                                        #显示本地打开的所有端口
ss -pl                                                       #显示每个进程具体打开的socket
ss -t -a                                                     #显示所有tcp socket
ss -u -a                                                     #显示所有的UDP Socekt
ss -o state established '( dport = :ssh or sport = :ssh )'   #显示所有已建立的ssh连接
ss -o state established '( dport = :http or sport = :http )' #显示所有已建立的HTTP连接
ss -s                                                        #列出当前socket详细信息


[root@centos8 ~]#ss -no state established '( dport = :21 or sport = :21 )'
Netid   Recv-Q   Send-Q      Local Address:Port        Peer Address:Port
tcp      0         0         [::ffff:10.0.0.8]:21      [::ffff:10.0.0.7]:46638  timer:(keepalive,119min,0)

ifconfig

interface config 接口配置,ifconfig 命令用于显示设置网络设备。 来自于 net-tools 包,建议使用 ip 代替

-a    # 显示全部接口信息,包括已经被禁用的网卡
-s    # 示摘要信息(类似于 netstat -i)
up    # 启用网卡,调用的是/usr/sbin/ifup脚本
down  # 禁用网卡,调用的是/usr/sbin/ifdown脚本

示例:

ifconfig -s ens33

示例:

#清除eth0上面的IP地址
[root@centos8 ~]#ifconfig eth0 0.0.0.0

#启用和禁用网卡
[root@centos8 ~]#ifconfig eth0 down
[root@centos8 ~]#ifconfig eth0 up

#对一个网卡设置多个IP地址
[root@centos8 ~]#ifconfig eth0:1 172.16.0.8/24

NetworkManager

chkconfig

chkconfig [--list] [--type <type>] [name]
chkconfig --add <name>
chkconfig --del <name>
chkconfig --override <name>
chkconfig [--level <levels>] [--type <type>] <name> <on|off|reset|resetpriorities>

维护/etc/rc[0-6].d 目录,可以看到目录下都链接文件,有 K 开头和 S 开头,K 开头需要传入 stop 参数,S 开头需要传入 start 参数。init 进程有 0-6 种等级,init 会执行对应 rc 目录下的所有脚本,例如:init0 关机,会执行 rc0.d 目录下的所有脚本,所以可以看到 rc0.d 目录下全都是 K 开头的文件。

init1-5 开机自启,init0、6 关机自动运行。所以可以把管理脚本放到/etc/rc.d/init.d 目录下,然后在 rc[0-6].d 目录下按照一定的命名规范创建软连接即可。chkconfig 命令可以帮我们实现创建、修改、删除等管理软连接的操作,从而实现开机自启、关机自动关闭等功能。

  • –add:在 rc[0-6].d 下创建对应链接文件,rc[016].d 下是 K 开头,rc[2-5].d 下是 S 开头
  • –del:删除 rc[0-6].d 下对应的链接文件
  • –list:列出 chkconfig 管理的所有服务
  • on:修改 rc[0-6].d 下对应链接文件,rc[016].d 下是 K 开头,rc[2-5].d 下是 S 开头。如果没有则创建
  • off:修改 rc[0-6].d 下对应链接文件为 K 开头。如果没有则创建

chkconfig 适用于 CentOS6,CentOS7 也可以用,但是不推荐,CentOS8 下的 chkconfig 实际上是调用 systemctl

CentOS7、8 推荐使用 systemctl

service 和 systemctl

Linux 服务管理两种方式 service 和 systemctl ,service 配合 init,systemctl 配合 systemd。centos7、8 中的 init 被重定向到 systemd

service

service 命令其实是去/etc/init.d 目录下,去执行相关程序

systemctl

systemctl 集合了 service 和 chkconfig 的所有功能,在 CentOS8 下使用这俩命令实际上是间接调用 systemctl

unit

单元,systemd 中的一个概念,系统初始化需要做的事情非常多。需要启动后台服务,比如启动 ssh 服务;需要做配置工作,比如挂载文件系统。这个过程中的每一步都被 systemd 抽象为一个配置单元,即 unit。可以认为一个服务是一个配置单元,一个挂载点是一个配置单元,一个交换分区的配置是一个配置单元等等。systemd 将配置单元归纳为以下一些不同的类型。然而,systemd 正在快速发展,新功能不断增加。所以配置单元类型可能在不久的将来继续增加。下面是几个常见的 unit 类型:

- service    # 代表一个后台服务进程,这个最多的
- target
- wants
- socket
- mount
- slice
- path
- timer

配置单元的目录:/usr/lib/systemd/system

route

路由表管理命令

查看路由表

route
route -n

-n  # 以数字形式代替解释主机名形式来显示地址。此项对试图检测对域名服务器进行路由发生故障的原因非常有用

添加路由

route add [-net|-host|default] <TARGET> [netmask Nm] [gw <GW>] [[dev] <If>]

-net    # 目标地址是网段
-host   # 目标地址是主机,一般不添加这种路由
default # 默认,目标地址0.0.0.0
target  # 目标网络,可以用CIDR表示法,也可以写子网掩码,推荐前者
gw      # 网关
dev     # 本机接口,指定从哪个接口往目标网络发送请求,这个参数一般会忽略不写,因为通过网关和目标地址会自动判断。网关不为0.0.0.0,则这个本机接口和网关IP在同一网段;网关0.0.0.0,说明目标ip和本机ip在同一网段,那这个本机接口就和目标地址的ip在同一网段

示例:

[root@centos7 ~]#route add -net 172.18.0.0/16 gw 10.0.0.100 dev ens33
[root@centos7 ~]#route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.2        0.0.0.0         UG    100    0        0 ens33
10.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 ens33
10.0.0.0        0.0.0.0         255.255.255.0   U     101    0        0 ens37
172.18.0.0      10.0.0.100      255.255.0.0     UG    0      0        0 ens33

删除路由

怎添加就怎么删除

route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If]

示例:

[root@centos7 ~]#route del -net 172.18.0.0/16 gw 10.0.0.100 dev ens33
[root@centos7 ~]#route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.2        0.0.0.0         UG    100    0        0 ens33
10.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 ens33
10.0.0.0        0.0.0.0         255.255.255.0   U     101    0        0 ens37

ip

来自于 iproute 包,集合了 ifconfig 和 route 的所有功能,官方推荐使用 ip addressip link 代替 ifconfig 命令;使用 ip route 代替 route 命令

ip [ OPTIONS ] OBJECT { COMMAND | help }

ip 地址管理

给网卡 添加 | 删除 ip

ip address { add | del } IFADDR dev STRING [label LABEL] [scope {global|link|host}] [broadcast ADDRESS]

label     #网卡别名
scope     #指明作用域,global 全局可用、link 仅链接可用(必须绑定网卡,只有绑定的网口近来的请求可以相应)、host 本机可用
broadcast #指明广播地址

address 可以简写为 addr 甚至 a 都可以

示例:给 ens37 网卡添加 ip

ens37 网卡初始状态 ip address show dev ens37

给 ens37 添加 ip:11.0.0.120/24 ip address add 11.0.0.120/24 dev ens37

给 ens37 添加 ip:11.0.0.130/24 同时设置别名 ip address add 11.0.0.130/24 dev ens37 label ens37:1

示例:删除 ens37 网卡的 ip

[root@centos7 ~]#ip address del 11.0.0.120/24 dev ens37
[root@centos7 ~]#ip address del 11.0.0.130/24 dev ens37

示例:修改 ens37 网卡的 ip

# 添加新的,删除旧的
[root@centos7 ~]#ip address add 11.0.0.111/24 dev ens37
[root@centos7 ~]#ip address del 11.0.0.110/24 dev ens37

示例:设置 ip 过期时间

示例:replace 直接替换 ip

网卡管理

ip link set eth1 down         #禁用网卡
ip link set eth1 name wangnet #网卡改名
ip link set wangnet up        #启用网卡
ip addr flush dev eth0        #清除网络地址
#网卡别名
ip addr add 172.16.100.100/16 dev eth0 label eth0:0
ip addr del 172.16.100.100/16 dev eth0 label eth0:0

示例:临时修改网卡名称

$ip link set eth0 down      # 关闭网卡
$ip link set eth0 name abc  # 修改网卡
$ip link set abc up         # 启动网卡

路由管理

#添加路由:via是 经过 的意思
ip route add <TARGET> via <GW> dev <IFACE> src <SOURCE_IP>
TARGET:
主机路由:IP
网络路由:NETWORK/MASK
#添加网关:
ip route add default via GW dev IFACE
#删除路由:怎么添加就怎么删除,ip route 查询的直接整行复制就是 TARGET
ip route del TARGET
#显示路由:
ip route show|list
#清空路由表:
ip route flush [dev IFACE] [via PREFIX]

示例:

[root@centos7 ~]#ip route add 1.1.1.0/24 via 10.0.0.200 dev ens33
[root@centos7 ~]#ip route
default via 10.0.0.2 dev ens33 proto static metric 100
1.1.1.0/24 via 10.0.0.200 dev ens33
10.0.0.0/24 dev ens33 proto kernel scope link src 10.0.0.100 metric 100
11.0.0.0/24 dev ens37 proto kernel scope link src 11.0.0.110 metric 101
[root@centos7 ~]#ip route del 1.1.1.0/24 via 10.0.0.200 dev ens33

示例:查看路由过程

[root@centos8 ~]#ip route get 10.0.0.7  #查看到达10.0.0.7所使用的路由
10.0.0.7 dev eth0 src 10.0.0.8 uid 0
cache

[root@centos7 ~]#ip route get 47.104.192.22  #查看到达47.104.192.22所使用的路由
47.104.192.22 via 10.0.0.2 dev ens33 src 10.0.0.100
    cache

watch

watch 可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令。
可以用来监测一个命令的运行结果,来监测你想要的一切命令的结果变化。

watch [options] command

-n   # 每隔几秒运行一次程序,默认2秒
-d   # 高亮显示变化的区域

示例:

[root@centos7 ~]# watch -n 1 -d ifconfig -s ens33

arp

管理系统的 arp 缓存

  • -n:以数字形式显示 ip
  • -d address:删除一个 arp 表项
  • -s address hw_addr:添加一个 arp 表项,将 ip 和 MAC 地址绑定

网络测试诊断命令

测试网络连通性

ping

fping

跟踪路由

traceroute
tracepath
mtr

确定名称服务器使用

nslookup
host
dig

抓包工具

tcpdump
wireshark

安全扫描工具

nmap
netcat:网络界的瑞士军刀,即 nc / ncat

流量控制工具

tc

fping

类似 ping,用于将 icmp 探测发送到网络主机,当需要探测多个主机的网络时,fping 性能更高

示例:

fping 10.0.0.7
fping 10.0.0.7 10.0.0.8
fping -g 10.0.0.0/24
fping -g 10.0.0.5 10.0.0.10  # 10.0.0.5 ~ 10.0.0.10

如果不想被大量的 ping 和 fping 请求占用资源,可以设置禁止回复 icmp 的请求:

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

tcpdump ★★★

网络数据包截获分析工具。支持针对网络层、协议、主机、网络或端口的过滤。并提供 and、or、not 等逻辑语句帮助去除无用的信息

tcpdump [-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络界面>][-r<数据包文件>][-s<数据包大小>][-tt][-T<数据包类型>][-vv][-w<数据包文件>][输出数据栏位]

-a      # 尝试将网络和广播地址转换成名称
-c      # <数据包数目 >收到指定的数据包数目后,就停止进行倾倒操作
-d      # 把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出
-dd     # 把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出
-ddd    # 把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出
-e      # 在每列倾倒资料上显示连接层级的文件头
-f      # 用数字显示网际网络地址
-F      # <表达文件 >指定内含表达方式的文件
-i      # <网络界面 >使用指定的网络截面送出数据包
-l      # 使用标准输出列的缓冲区
-n      # 不把主机的网络地址转换成名字
-N      # 不列出域名
-O      # 不将数据包编码最佳化
-p      # 不让网络界面进入混杂模式
-q      # 快速输出,仅列出少数的传输协议信息
-r      # <数据包文件 >从指定的文件读取数据包数据
-s      # <数据包大小 >设置每个数据包的大小
-S      # 用绝对而非相对数值列出TCP关联数
-t      # 在每列倾倒资料上不显示时间戳记
-tt     # 在每列倾倒资料上显示未经格式化的时间戳记
-T      # <数据包类型 >强制将表达方式所指定的数据包转译成设置的数据包类型
-v      # 详细显示指令执行过程
-vv     # 更详细显示指令执行过程
-x      # 用十六进制字码列出数据包资料
-w      # <数据包文件 >把数据包数据写入指定的文件

示例:

# 查看网卡
[root@47105171233 ~]$tcpdump -D
1.eth0
2.nflog (Linux netfilter log (NFLOG) interface)
3.nfqueue (Linux netfilter queue (NFQUEUE) interface)
4.usbmon1 (USB bus number 1)
5.any (Pseudo-device that captures on all interfaces)
6.lo [Loopback]

# 不指定任何参数,监听第一块网卡上经过的数据包。主机上可能有不止一块网卡,所以经常需要指定网卡
tcpdump

# 监听特定网卡
tcpdump -i eth0

# 监听本机和特定主机的通信,监听主机10.0.0.100 的通信包,注意:出、入的包都会被监听
tcpdump host 10.0.0.100

# 特定来源、目标地址的通信
tcpdump src host hostname  #特定来源
tcpdump dst host hostname  #特定目标地址
tcpdump host hostname      #如果不指定src跟dst,那么来源或者目标是hostname的通信都会被监听
tcpdump port 3000          #特定端口

# 只监听TCP的数据包
tcpdump tcp

# 来源主机+端口+TCP,监听来自主机10.0.0.100在端口22上的TCP数据包
tcpdump tcp port 22 and src host 10.0.0.100

# 监听特定主机之间的通信
tcpdump ip host 10.0.0.101 and 10.0.0.102

# 10.0.0.101和除了10.0.0.1之外的主机之间的通信
tcpdump ip host 10.0.0.101 and ! 10.0.0.1

# 详细示例
tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
 # tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
 # -i eth1 : 只抓经过接口eth1的包
 # -t : 不显示时间戳
 # -s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包
 # -c 100 : 只抓取100个数据包
 # dst port ! 22 : 不抓取目标端口是22的数据包
 # src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24
 # -w ./target.cap : 保存成cap文件,方便用wireshark分析

nmap ★★★

扫描远程主机工具,功能远超越用世人皆知的 Ping


网络相关命令
http://blog.lujinkai.cn/运维/基础/网络/网络相关命令/
作者
像方便面一样的男子
发布于
2021年1月1日
更新于
2023年12月5日
许可协议