参考文献

route

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default _gateway 0.0.0.0 UG 100 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-f049d4c62b6c
172.19.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-11fe7ed88102
172.20.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-b27db3941543
172.21.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-091b39d7ee0b
172.26.160.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0
_gateway 0.0.0.0 255.255.255.255 UH 100 0 0 eth0

# Destination : 其实就是 Network 的意思;
# Gateway : 就是该接口的 Gateway 那个 IP 啦!若为 0.0.0.0 表示不需要额外的 IP;
# Genmask : 就是 Netmask 啦!与 Destination 组合成为一部主机或网域;
# Flags : 共有多个旗标可以来表示该网域或主机代表的意义:
# U: 代表该路由可用;
# G: 代表该网域需要经由 Gateway 来帮忙转递;
# H: 代表该行路由为一部主机,而非一整个网域;
# Iface : 就是 Interface (接口) 的意思.
1
ip route list

arp

1
2
arp -a
arp -v

traceroute

1
2
3
4
5
6
7
8
# traceroute [-nwig] IP 
参数:
-n : 可以不必进行主机的名称解析,单纯用 IP ,速度较快!
-w : 若对方主机在几秒钟内没有回声就宣告不治...预设是 5 秒
-i : 用在比较复杂的环境,如果你的网络接口很多很复杂时,才会用到这个参数;
举例来说,你有两条 ADSL 可以连接到外部,那你的主机会有两个 ppp,
你可以使用 -i 来选择是 ppp0 还是 ppp1 啦!
-g : 与 -i 的参数相仿,只是 -g 后面接的是 gateway 的 IP 就是了

ping

  • ping的底层用的是网络层的ICMP协议.

  • ping是测量RTT的一个简单方法

  • ping命令加上时间戳

1
ping xxx.xxx.xxx.xxx |xargs -I{} bash -c 'echo $(date +%F_%T) "{}"'

netstat

host

  • 查询某个主机名称的IP
1
2
3
4
5
6
7
8
9
[root@linux ~]# host [-a] hostname [server] 
参数:
-a : 列出该主机详细的各项主机名称设定数据
[server] : 可以使用非为 /etc/resolv.conf 的 DNS 主机来查询.

# host holelin.cn
holelin.cn has address 47.100.193.58
holelin.cn mail is handled by 10 mxw.mxhichina.com.
holelin.cn mail is handled by 5 mxn.mxhichina.com.

nslookup

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@linux ~]# nslookup [-query=[type]] [hostname|IP] 
参数:
-query=type: 查询的类型,除了传统的 IP 与主机名称对应外,DNS 还有很多信息,
所以我们可以查询很多不同的信息,包括 mx, cname 等等,
例如: -query=mx 的查询方法!

# nslookup holelin.cn
Server: 127.0.0.53
Address: 127.0.0.53#53

Non-authoritative answer:
Name: holelin.cn
Address: 47.100.193.58

telnet

1
2
3
4
5
# 使用ssh判断服务器端口是否打开
ssh -v ip -p port
# 使用telnet判断服务器端口是否打开
telnet ip port

tshark

dig

  • 安装

    1
    yum install bind-utils
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# dig [server] [name] [type]

# dig holelin.cn

; <<>> DiG 9.11.36-RedHat-9.11.36-8.al8.2 <<>> holelin.cn
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50239
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;holelin.cn. IN A

;; ANSWER SECTION:
holelin.cn. 10 IN A 47.100.193.58

;; Query time: 6 msec
;; SERVER: 100.100.2.136#53(100.100.2.136)
;; WHEN: 二 4月 02 16:27:59 CST 2024
;; MSG SIZE rcvd: 44
  • 第一部分显示dig命令的版本和输入的参数.
  • 第二部分显示服务返回的一些技术详情,比较重要的是status.如果status 的值为NOERROR 则说明本次查询成功结束.
  • 第三部分中的QUESTION SECTION显示我们要查询的域名.
  • 第四部分的ANSWER SECTION是查询到的结果.
  • 第五部分则是本次查询的一些统计信息,比如用了多长时间,查询了哪个 DNS 服务器,在什么时间进行的查询等等.
  • 默认情况下 dig 命令查询 A 记录,上图中显示的 A 即说明查询的记录类型为 A 记录.在尝试查询其它类型的记录前让我们先来了解一下常见的 DNS 记录类型.

常见DNS记录的类型

类型 目的
A 地址记录,用来指定域名的 IPv4 地址,如果需要将域名指向一个 IP 地址,就需要添加 A 记录.
AAAA 用来指定主机名(或域名)对应的 IPv6 地址记录.
CNAME 如果需要将域名指向另一个域名,再由另一个域名提供 ip 地址,就需要添加 CNAME 记录.
MX 如果需要设置邮箱,让邮箱能够收到邮件,需要添加 MX 记录.
NS 域名服务器记录,如果需要把子域名交给其他 DNS 服务器解析,就需要添加 NS 记录.
SOA SOA 这种记录是所有区域性文件中的强制性记录.它必须是一个文件中的第一个记录.
TXT 可以写任何东西,长度限制为 255.绝大多数的 TXT记录是用来做 SPF 记录(反垃圾邮件).

示例

1
2
3
4
5
# 当你的机器在内网的时候,可以通过这个命令查看外网的IP
curl ifconfig.me

# 显示主机IP
ip a|grep "global"|awk '{print $2}'|awk -F / '{print $1}'
1
2
3
4
5
6
7
8
9
# 实时查看本机网络服务的活动状态
lsof –i

# 列出所有tcp 网络连接信息
lsof -i tcp
# 列出谁在使用某个端口
lsof -i :8080
# 列出某个用户的所有活跃的网络端口
lsof -a -u test -i
1
2
3
4
5
# 列出本机进程监听的端口号
netstat –tlnp

# 显示侦听在这个端口号的进程
netstat -anop
  • a: 不仅显示正在通信的套接字,还显示包括尚未开始通信等状态的所有套接字
  • n: 显示IP地址和端口号
  • o: 显示使用该套接字的程序PID

找出本地网络的主机列表

1
2
3
4
5
6
7
8
9
10
11
12
13
# ping -b 广播地址

# ifconfig eno1
eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.11.216 netmask 255.255.255.0 broadcast 192.168.11.255
inet6 fe80::f0c3:9a1d:c53f:8b94 prefixlen 64 scopeid 0x20<link>
ether 34:73:5a:98:b9:14 txqueuelen 1000 (以太网)
RX packets 146057911 bytes 159717684756 (159.7 GB)
RX errors 0 dropped 24 overruns 0 frame 0
TX packets 84155066 bytes 54592209289 (54.5 GB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 39
# ping -b 192.168.11.255

打印所有容器的内部IP

1
docker ps -q | xargs -n 1 -I {} sh -c "echo 'Container ID: {}'; docker inspect -f 'Name: {{.Name}} - IP: {{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' {}"