寫在前面
本文看下常用網絡工具。
1:ping
1.1:用途
用于檢驗網絡的連通性。
1.2:實戰
在Linux環境中執行:ping www.sina.com.cn
:
[root@localhost ~]# ping www.sina.com.cn
PING spool.grid.sinaedge.com (111.62.129.51) 56(84) bytes of data.
64 bytes from 111.62.129.51 (111.62.129.51): icmp_seq=1 ttl=49 time=18.1 ms
64 bytes from 111.62.129.51 (111.62.129.51): icmp_seq=2 ttl=49 time=25.9 ms
...
^C
--- spool.grid.sinaedge.com ping statistics ---
12 packets transmitted, 12 received, 0% packet loss, time 11018ms
rtt min/avg/max/mdev = 17.397/19.402/25.901/2.092 ms
1.3:原理以及抓包驗證
1.3.1:原理
基于ICMP協議,ICMP是屬于網絡層的協議,基于IP協議,即在IP協議的基礎上增加了相關信息來滿足需求。格式如下:
1.3.2:抓包驗證
- 使用tcpdump抓包
先抓著包:
[root@localhost ~]# rm -f /tmp/ping_sina.pcap && tcpdump -c 5 -i any icmp and host www.sina.com.cn -w /tmp/ping_sina.pcap
tcpdump: WARNING: any: That device doesn't support promiscuous mode
(Promiscuous mode not supported on the "any" device)
tcpdump: listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes參數解釋:
-c 5: 抓五個包
-i any icmp:在任意網卡抓icmp協議的包
host www.sina.com.cn:host是www.sina.com.cn
-w /tmp/ping_sina.pcap:抓到的包寫到文件/tmp/ping_sina.pcap中
總的就是:對主機www.sina.com.cn抓5條任意網卡的ICMP協議的包,并將結果寫到文件/tmp/ping_sina.pcap中。
成功后生成文件:
[root@localhost tmp]# pwd
/tmp
[root@localhost tmp]# ll | grep ping
-rw-r--r--. 1 root root 624 Feb 17 22:16 ping_sina.pcap
導出到win中并使用wires hark打開:
and
2:ifconfig
2.1:用途
該命令用來列舉系統中的網絡設備,即網卡列表。
2.2:分析
一般執行如下命令:
vagrant@ubuntu-xenial-01:~$ ifconfig
cni0 Link encap:Ethernet HWaddr 0a:58:0a:f4:00:01inet addr:10.244.0.1 Bcast:0.0.0.0 Mask:255.255.255.0inet6 addr: fe80::401:b4ff:fe51:bcf9/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1450 Metric:1RX packets:2133 errors:0 dropped:0 overruns:0 frame:0TX packets:2216 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:139381 (139.3 KB) TX bytes:853302 (853.3 KB)
...
解釋:
cni0 Link encap:Ethernet HWaddr 0a:58:0a:f4:00:01網卡名稱 網絡類型為以太網 mac地址
inet addr:10.244.0.1 Bcast:0.0.0.0 Mask:255.255.255.0ipv4地址,廣播地址,子網掩碼,其中廣播地址可以通過udp的方式給網絡內的所有主機發消息
inet6 addr: fe80::401:b4ff:fe51:bcf9/64 Scope:Linkipv6地址,目前還在普及中,解決ipv4地址不夠用問題
UP BROADCAST RUNNING MULTICAST MTU:1450 Metric:1mtu,IP數據包最大大小,metric,優先級,多個網卡到同一ip都可達時的優先級,值越小,優先級越高
3:通過netstat和lsof檢查網絡問題
3.1:netstat
在線上環境中有時候會遇到,明明服務是正常的,但是tcp連接卻無法建立成功,到底是因為啥呢?是time_wait過多導致無可用的端口了,還是怎樣?此時我們就可以使用netstat命令來看下,netstat -alepn
,如下:
[root@localhost tmp]# netstat -alepn
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 0 20874 1022/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 0 21847 1224/master
tcp 0 0 192.168.10.168:22 192.168.10.94:57233 ESTABLISHED 0 27499 2209/sshd: root@not
tcp 0 0 192.168.10.168:22 192.168.10.94:60364 ESTABLISHED 0 22611 1546/sshd: root@pts
tcp 0 36 192.168.10.168:22 192.168.10.94:51775 ESTABLISHED 0 27303 2138/sshd: root@pts
tcp6 0 0 :::22 :::* LISTEN 0 20883 1022/sshd
tcp6 0 0 ::1:25 :::* LISTEN 0 21848 1224/master
udp 0 0 0.0.0.0:68 0.0.0.0:* 0 20090 829/dhclient
udp 0 0 127.0.0.1:323 0.0.0.0:* 0 18592 678/chronyd
udp6 0 0 ::1:323 :::* 0 18593 678/chronyd
raw6 0 0 :::58 :::* 7 0 19376 702/NetworkManager
...
可以先看State列觀察tcp連接的狀態是否異常,比如有大量的time_wait就可能是有問題的了。
每一列是什么意思呢,比如tcp 0 0 192.168.10.168:22 192.168.10.94:57233 ESTABLISHED 0 27499 2209/sshd: root@not
,意思是:
Proto:使用的協議是tcp
Local Address:監聽的是網卡192.168.10.168(其實是我vm的Linux環境)的22端口號
Foreign Address:192.168.10.94:57233,遠端的服務是192.168.10.94(其實是我本地的win),端口號是57233(隨機分配的端口號)
EST
ABLISHED:當前tcp連接的狀態是ESTABLISHED,即正常連接狀態
27499 2209/sshd:進程信息,這里是sshd,即ssh連接使用的
3.2:lsof
netstat用于列出所有的端口上的連接信息,而lsof則是用于查看某個端口號,或者是本位套接字是被哪個進程打開的,這在我們遇到類似于端口號占用的問題
,或者是確定服務是否啟動成功
時非常有用,比如我們現在遇到了端口號被占用的問題,就可以執行如下命令:
[root@localhost tmp]# lsof -i :22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1022 root 3u IPv4 20874 0t0 TCP *:ssh (LISTEN)
sshd 1022 root 4u IPv6 20883 0t0 TCP *:ssh (LISTEN)
sshd 1546 root 3u IPv4 22611 0t0 TCP localhost.localdomain:ssh->192.168.10.94:60364 (ESTABLISHED)
sshd 2138 root 3u IPv4 27303 0t0 TCP localhost.localdomain:ssh->192.168.10.94:51775 (ESTABLISHED)
sshd 2209 root 3u IPv4 27499 0t0 TCP localhost.localdomain:ssh->192.168.10.94:57233 (ESTABLISHED)
當然也可以查看本地套接字,比如查看docker的/var/run/docker.sock
:
[root@localhost tmp]# lsof /var/run/docker.sock
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
dockerd-c 2851 root 5u unix 0xffff904e322fe1c0 0t0 32258 /var/run/docker.sock
4:tcpdump
just go。
寫在后面
參考文章列表
抓包之tcpdump安裝和使用。