Linux网络故障排查命令(ifconfig、ping、telnet、netstat、lsof、nc、curl、tcpdump)
目錄
- ifconfig
- -s,顯示網(wǎng)卡信息的精簡列表
- -a、up、down
- 將IP地址綁定到某個網(wǎng)卡,以及解綁操作
- ping
- telnet
- netstat
- lsof
- nc
- 模擬一個服務器程序和客戶端程序進行通信
- 發(fā)送文件
- curl
- tcpdump
- 參數(shù)
- 連接一個正常的監(jiān)聽端口
ifconfig
該命令用來查看當前系統(tǒng)的網(wǎng)卡和IP地址信息:
dyy@dyy-Lenovo-ThinkBook-14-IIL:~$ ifconfig enp1s0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500ether b4:a9:fc:80:03:03 txqueuelen 1000 (以太網(wǎng))RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10<host>loop txqueuelen 1000 (本地環(huán)回)RX packets 15831 bytes 3201620 (3.2 MB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 15831 bytes 3201620 (3.2 MB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0wlp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.1.109 netmask 255.255.255.0 broadcast 192.168.1.255inet6 fe80::c1dc:2b2b:b4d4:d4bd prefixlen 64 scopeid 0x20<link>ether 4c:eb:bd:0c:f8:f5 txqueuelen 1000 (以太網(wǎng))RX packets 4486 bytes 2191259 (2.1 MB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 2383 bytes 643251 (643.2 KB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0我們來解釋一下上面的輸出信息:
以上顯示了
本機當前激活的網(wǎng)卡信息:如lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
每個激活的網(wǎng)卡的IPv4、IPv6地址:如inet 127.0.0.1 、inet6 fe80::c1dc:2b2b:b4d4:d4bd
子網(wǎng)掩碼:如netmask 255.0.0.0
廣播地址:如broadcast 192.168.1.255
-s,顯示網(wǎng)卡信息的精簡列表
dyy@dyy-Lenovo-ThinkBook-14-IIL:~$ ifconfig -s Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg enp1s0 1500 0 0 0 0 0 0 0 0 BMU lo 65536 113980 0 0 0 113980 0 0 0 LRU wlp2s0 1500 10199 0 0 0 4491 0 0 0 BMRU-a、up、down
ifconfig只會顯示激活的網(wǎng)卡信息,-a選項可以顯示所有網(wǎng)卡信息。
ifconfig Iface up # 激活名為Iface的網(wǎng)卡 ifconfig Iface down # 禁用名為Iface的網(wǎng)卡將IP地址綁定到某個網(wǎng)卡,以及解綁操作
# 將指定ip地址綁定到某個網(wǎng)卡上 ifconfig 網(wǎng)卡名 add IP地址 # 從某個網(wǎng)卡解綁指定的IP地址 ifconfig 網(wǎng)卡名 del IP地址ping
ping命令一般用于偵測本機到目標主機的網(wǎng)絡是否暢通。
dyy@dyy-Lenovo-ThinkBook-14-IIL:~$ ping 120.55.94.78 PING 120.55.94.78 (120.55.94.78) 56(84) bytes of data. 64 比特,來自 120.55.94.78: icmp_seq=1 ttl=55 時間=9.87 毫秒 64 比特,來自 120.55.94.78: icmp_seq=2 ttl=55 時間=6.61 毫秒 64 比特,來自 120.55.94.78: icmp_seq=3 ttl=55 時間=6.93 毫秒 64 比特,來自 120.55.94.78: icmp_seq=4 ttl=55 時間=10.4 毫秒 64 比特,來自 120.55.94.78: icmp_seq=5 ttl=55 時間=6.67 毫秒 64 比特,來自 120.55.94.78: icmp_seq=6 ttl=55 時間=6.96 毫秒 64 比特,來自 120.55.94.78: icmp_seq=7 ttl=55 時間=6.97 毫秒 64 比特,來自 120.55.94.78: icmp_seq=8 ttl=55 時間=6.96 毫秒 64 比特,來自 120.55.94.78: icmp_seq=9 ttl=55 時間=6.94 毫秒 64 比特,來自 120.55.94.78: icmp_seq=10 ttl=55 時間=6.93 毫秒 64 比特,來自 120.55.94.78: icmp_seq=11 ttl=55 時間=6.98 毫秒 64 比特,來自 120.55.94.78: icmp_seq=12 ttl=55 時間=6.92 毫秒 64 比特,來自 120.55.94.78: icmp_seq=13 ttl=55 時間=6.59 毫秒 64 比特,來自 120.55.94.78: icmp_seq=14 ttl=55 時間=6.89 毫秒 64 比特,來自 120.55.94.78: icmp_seq=15 ttl=55 時間=6.97 毫秒 64 比特,來自 120.55.94.78: icmp_seq=16 ttl=55 時間=8.31 毫秒 64 比特,來自 120.55.94.78: icmp_seq=17 ttl=55 時間=7.80 毫秒 64 比特,來自 120.55.94.78: icmp_seq=18 ttl=55 時間=6.95 毫秒 64 比特,來自 120.55.94.78: icmp_seq=19 ttl=55 時間=10.3 毫秒 64 比特,來自 120.55.94.78: icmp_seq=20 ttl=55 時間=10.2 毫秒 64 比特,來自 120.55.94.78: icmp_seq=21 ttl=55 時間=9.88 毫秒 ^C --- 120.55.94.78 ping 統(tǒng)計 --- 已發(fā)送 21 個包, 已接收 21 個包, 0% 包丟失, 耗時 20028 毫秒 rtt min/avg/max/mdev = 6.587/7.762/10.386/1.374 ms上面輸出顯示了目標網(wǎng)絡可達。在linux上,如果目標網(wǎng)絡不可達,則使用ping命令會一直發(fā)送而無輸出結果,如:
dyy@dyy-Lenovo-ThinkBook-14-IIL:~$ ping 120.55.94.79 PING 120.55.94.79 (120.55.94.79) 56(84) bytes of data. ^C --- 120.55.94.79 ping 統(tǒng)計 --- 已發(fā)送 5 個包, 已接收 0 個包, 100% 包丟失, 耗時 4080 毫秒ping的目標也可以是個域名:
dyy@dyy-Lenovo-ThinkBook-14-IIL:~$ ping https://www.baidu.com/ ping: https://www.baidu.com/: 未知的名稱或服務 dyy@dyy-Lenovo-ThinkBook-14-IIL:~$ ping www.baidu.com PING www.a.shifen.com (36.152.44.95) 56(84) bytes of data. 64 比特,來自 36.152.44.95 (36.152.44.95): icmp_seq=1 ttl=56 時間=32.5 毫秒 64 比特,來自 36.152.44.95 (36.152.44.95): icmp_seq=2 ttl=56 時間=11.9 毫秒 64 比特,來自 36.152.44.95 (36.152.44.95): icmp_seq=3 ttl=56 時間=10.4 毫秒 ^C --- www.a.shifen.com ping 統(tǒng)計 --- 已發(fā)送 3 個包, 已接收 3 個包, 0% 包丟失, 耗時 2003 毫秒 rtt min/avg/max/mdev = 10.444/18.269/32.466/10.056 msping命令是通過發(fā)送ICMP數(shù)據(jù)包實現(xiàn)的。
telnet
如果一個服務程序對外開啟了監(jiān)聽,我們可以使用telnet ip port的方式連接上去:
Web服務器默認的端口號是80,所以我們可以連接成功
也就是說我們可以通過telnet命令檢測指定IP地址和端口號的監(jiān)聽服務是否存在。
為了檢測一個服務是否正常對外服務,一般先用ping檢測是否能到達該IP地址,然后再用telnet檢測是否能連接上去。
netstat
該命令經(jīng)常用于查看網(wǎng)絡連接狀態(tài)
下面是它的一些參數(shù):
對于一些有別名的IP地址和端口號,如127.0.0.1的別名是localhost、80的端口會被顯示成http,加上n之后就只會顯示數(shù)字了:
lsof
lsof(list opened filedescriptor):列出已經(jīng)打開的文件描述符
一般來說,lsof的輸出較多,可以使用grep命令來過濾如:
也可以使用-p來過濾出指定pid的進程
nc
nc即netcat命令,常用語模擬一個服務器程序被其他客戶端連接,或者模擬一個客戶端連接其他服務器,連接之后就可以進行數(shù)據(jù)收發(fā)。默認使用TCP,加上-u選項使用的就是UDP
模擬一個服務器程序和客戶端程序進行通信
使用-l,在某個ip地址和端口上開啟一個監(jiān)聽服務,以便讓其他客戶端連接,為了顯示詳細信息,可以加上-v
dyy@dyy-Lenovo-ThinkBook-14-IIL:~$ nc -v -l 0.0.0.0 6000 Listening on 0.0.0.0 6000啟動了一個監(jiān)聽服務器,監(jiān)聽IP地址為0.0.0.0,這樣機器就可以被外網(wǎng)訪問了,監(jiān)聽端口為6000
模擬客戶端程序不需要加-l,直接寫上IP地址和端口號即可:
發(fā)送文件
這里接受文件方是服務器,發(fā)送文件方是客戶端。
服務端,接受命令:
客戶端,發(fā)送命令:
nc IP地址 端口號 < 發(fā)送的文件名使用的時候先開服務端的監(jiān)聽再開客戶端。
curl
用法:
curl 某個url curl http://www.baidu.com
這樣的結果就是將目標網(wǎng)頁的內(nèi)容輸出到shell窗口上,當然也可以保存:
HTTP常用的請求方式是GET和POST,我們可以使用-X選項顯式指定方式,不指定的時候默認是GET方式:
dyy@dyy-Lenovo-ThinkBook-14-IIL:~$ curl -X GET http://www.baidu.com/index.php?s=9 <!DOCTYPE html> <!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn"></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新聞</a> <a href=http://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地圖</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>視頻</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>貼吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登錄</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登錄</a>');</script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多產(chǎn)品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>關于百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>©2017 Baidu <a href=http://www.baidu.com/duty/>使用百度前必讀</a> <a href=http://jianyi.baidu.com/ class=cp-feedback>意見反饋</a> 京ICP證030173號 <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>dyy@dyy-Lenovo-ThinkBook-14-IIL:~$ curl -X POST -d 'somepostdata' 'https://www.somesite.com/api/vl/chat' <html> <head><title>302 Found</title></head> <body bgcolor="white"> <center><h1>302 Found</h1></center> <hr><center>openresty/1.13.6.1</center> </body> </html>tcpdump
參數(shù)
tcpdump是一個linux上的抓包工具,在sudo權限下使用
常用命令選項如下:
1、-i:指定要捕獲的目標網(wǎng)卡名字,網(wǎng)卡名可以使用ifconfig獲得,如果要抓取所有網(wǎng)卡上的包,使用any關鍵字:
2、-X:以ASCII和十六進制形式輸出捕獲的數(shù)據(jù)包內(nèi)容,減去鏈路層的包頭信息;
-XX:以ASCII和十六進制形式輸出捕獲的數(shù)據(jù)包內(nèi)容,包括鏈路層的包頭信息;
3、-n:不要將IP地址顯示成別名
-nn:不要將IP地址和端口顯示成別名
4、-S:以絕對值顯示包的ISN(包序列號),默認以上一個包的偏移量顯示
5、-vv、-vvv:顯示詳細抓包數(shù)據(jù)
6、-w:將抓取的包的原始信息,寫入文件中
7、-r:從保存的文件包中讀取數(shù)據(jù)包信息
tcpdump命令還支持各種數(shù)據(jù)包過濾的表達式:
## 僅僅顯示經(jīng)過8888端口的數(shù)據(jù)包,包括tcp和udp的8888 tcpdump -i any 'port 8888' ## 僅僅顯示經(jīng)過tcp 8888 渡口的數(shù)據(jù)包 tcpdump -i any 'tp port 8888' ## 僅僅顯示源端口是tcp 8888的數(shù)據(jù)包 tcpdump -i any 'tcp src port 8888' ## 僅僅顯示源端口tcp8888或者目標端口是udp 8888的數(shù)據(jù)包 tcpdump -i any 'tcp src port 8888 or udp dst port 8888'連接一個正常的監(jiān)聽端口
創(chuàng)建一個服務器監(jiān)聽程序:
nc -v -l 127.0.0.1 12345在另外一個窗口,對12345端口進行抓包
tcpdump -i any 'port 12345' -XSX -nn -vv在另外一個窗口創(chuàng)建一個客戶端發(fā)送數(shù)據(jù):
nc -v 127.0.0.1 12345
在沒有發(fā)送數(shù)據(jù)之前,有三個包:
就是TCP連接的三次握手數(shù)據(jù)包。三次握手的過程:
客戶端先向服務器發(fā)送一個SYN;
服務器應答一個SYN+ACK,應答的序列號遞增1
客戶端應答一個ACK。
我們可以關注一下上面的
Flags:
S -> S. ->.
seq 和 ack:
1737383646
->
2670654383, 1737383647
->
1737383647, 2670654384
顯然是正確的
總結
以上是生活随笔為你收集整理的Linux网络故障排查命令(ifconfig、ping、telnet、netstat、lsof、nc、curl、tcpdump)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 两种大小端判断的方式
- 下一篇: 悲伤逆流成河剧情介绍