在調(diào)試網(wǎng)絡(luò)程序或者定位網(wǎng)絡(luò)相關(guān)問題時(shí),有一個(gè)命令不得不知,它就是netstat。netstat命令用于查看網(wǎng)絡(luò)連接,路由表,網(wǎng)絡(luò)接口統(tǒng)計(jì)數(shù)據(jù), 虛擬連接等信息。netstat的選項(xiàng)很多,但是本文準(zhǔn)備介紹一些netstat命令的實(shí)用技巧。
查看某個(gè)端口是否被占用
如果你遇到“Address already in use”的錯(cuò)誤,那么你就需要好好看看是不是端口已經(jīng)被占用了。-a(all)參數(shù)用于列出所有監(jiān)聽和非監(jiān)聽狀態(tài)的連接。
$netstat-a|grep6379tcp00*:6379*:*LISTENtcp600[::]:6379[::]:*LISTEN
這里我們可以看到,有一個(gè)tcp連接使用了6379端口,并且當(dāng)前處于LISTEN狀態(tài),這些狀態(tài)信息對于分析網(wǎng)絡(luò)連接問題非常有幫助,我們將會(huì)在后面的文章中看到它們大放異彩。
當(dāng)然你也可以使用lsof命令中的方法來查看。
查找占用端口的進(jìn)程
前面雖然知道已經(jīng)有進(jìn)程使用了6379端口,但是不知道是哪個(gè)進(jìn)程,因此為了知道進(jìn)程信息,需要使用-p(program)參數(shù):
$netstat-ap|grep6379tcp00*:6379*:*LISTEN10011/redis-servertcp600[::]:6379[::]:*LISTEN10011/redis-server
這個(gè)時(shí)候就可以看到是進(jìn)程id為10011的redis-server進(jìn)程占用了6379端口,至此要?dú)⒁獎(jiǎng)幘碗S你便了。
查看指定協(xié)議的連接
我們都知道,除了TCP之外還有UDP,如果我們想查看指定類型的連接呢?
$netstat-at#-t,查看tcp連接ProtoRecv-QSend-QLocalAddressForeignAddressStatetcp00192.168.0.103:42468113.96.233.139:httpsESTABLISHEDtcp00192.168.0.103:59326123.58.182.252:httpsTIME_WAITtcp00192.168.0.103:59328123.58.182.252:httpsTIME_WAIT(未顯示完全)
以此種方式,可以看到所有的TCP連接,而對于UDP連接,只需要使用-u(UDP):
$netstat-auudp00*:36305*:*udp00127.0.1.1:domain*:*udp00*:bootpc*:*udp00*:ipp*:*(未顯示完全))
當(dāng)然了,這兩個(gè)參數(shù)也是可以一起用的。
除此之外,還可以使用-4或-6來指定查看ipv4還是ipv6的連接:
查看處于監(jiān)聽狀態(tài)的連接
對于還沒有建立完整連接的服務(wù)器來說,它啟動(dòng)后正常的狀態(tài)是LISTEN狀態(tài),如果只想查看處于該狀態(tài)的連接,則可以使用-l(LISTEN)參數(shù):
$netstat-lProtoRecv-QSend-QLocalAddressForeignAddressStatetcp00127.0.1.1:domain*:*LISTENtcp00localhost:5941*:*LISTENtcp00localhost:ipp*:*LISTENtcp00localhost:socks*:*LISTENtcp00*:6379*:*LISTEN(未顯示完全)
這個(gè)時(shí)候記得不要帶上-a參數(shù),它會(huì)列出所有。
而你如果要查看其他狀態(tài)的連接,只需要結(jié)合grep使用即可,例如,查看ESTABLISHED狀態(tài)的連接:
$netstat-anp|grepESTAB(Notallprocessescouldbeidentified,non-ownedprocessinfowillnotbeshown,youwouldhavetoberoottoseeitall.)tcp00192.168.0.103:42468113.96.233.139:443ESTABLISHED2613/chrometcp00192.168.0.103:38024108.177.125.188:443ESTABLISHED2613/chrome
不解析主機(jī),端口等信息
不知道你有沒有發(fā)現(xiàn),在執(zhí)行前面的命令的時(shí)候,速度很慢,讓你一度懷疑是不是自己電腦太卡了。實(shí)際上,你觀察前面的輸出結(jié)果就會(huì)發(fā)現(xiàn),很多連接的主機(jī)名和端口對應(yīng)的應(yīng)用都解析出來了,例如:
123.58.182.252:https
所以慢是因?yàn)樗枰鼋馕?,使?n(numeric)參數(shù)就可以快速顯示原始數(shù)字端口或地址了:
$netstat-anp
一定要自己嘗試一下奧!
持續(xù)輸出連接信息
你在定位網(wǎng)絡(luò)相關(guān)問題的時(shí)候,總不想執(zhí)行一次觀察一次吧?能不能自動(dòng)反復(fù)執(zhí)行查看呢?當(dāng)然可以啦!可以使用-c(continuous)參數(shù):
$netstat-npc
這樣,它就會(huì)每隔一秒執(zhí)行一次。
查看用戶和連接的iNode
這條連接是哪個(gè)用戶建立的呢?unix下一切皆文件,那么這個(gè)連接的iNode是多少呢?借助-e(extend)參數(shù)可以看到這些信息:
$netstat-entActiveInternetconnections(w/oservers)ProtoRecv-QSend-QLocalAddressForeignAddressStateUserInodetcp00192.168.0.103:42468113.96.233.139:443ESTABLISHED1000134891tcp00192.168.0.103:46556121.9.246.106:443TIME_WAIT00
可以看到在使用-e參數(shù)后,多了最后兩列,分別是user和Inode。而使用id命令可以知道該user到底是誰:
$id1000uid=1000(hyb)gid=1000(hyb)groups=1000(hyb),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),113(lpadmin),128(sambashare)
查看連接相關(guān)的定時(shí)器
使用-o可以查看和連接相的定時(shí)器信息,
$netstat-ntoActiveInternetconnections(w/oservers)ProtoRecv-QSend-QLocalAddressForeignAddressStateTimertcp00192.168.0.103:42468113.96.233.139:443ESTABLISHEDkeepalive(18.69/0/0)tcp11192.168.0.103:43718113.96.233.139:443LAST_ACKon(19.97/7/0)tcp00192.168.0.103:38024108.177.125.188:443ESTABLISHEDkeepalive(34.76/0/0)tcp00192.168.0.103:60362123.58.182.252:443TIME_WAITtimewait(6.70/0/0)tcp600127.0.0.1:9614127.0.0.1:59736ESTABLISHEDoff(0.00/0/0)
最后的timer列相關(guān)字段含義如下:
keepalive keepalive的時(shí)間計(jì)時(shí)
on 重發(fā)的時(shí)間計(jì)時(shí)
off 沒有時(shí)間計(jì)時(shí)
timewait 等待時(shí)間計(jì)時(shí)
關(guān)于定時(shí)器的含義,需要對TCP協(xié)議有較多理解,這里就不展開了。
查看數(shù)據(jù)包統(tǒng)計(jì)信息
各種協(xié)議的數(shù)據(jù)包的收發(fā)情況如何呢?連接數(shù)量如何呢是用-s(statistics)參數(shù)可以查看:
$netstat-s(僅顯示了TCP協(xié)議的結(jié)果)Tcp:3067activeconnectionsopenings1passiveconnectionopenings173failedconnectionattempts587connectionresetsreceived10connectionsestablished657576segmentsreceived456349segmentssendout2700segmentsretransmited16badsegmentsreceived.1321resetssent
查看路由信息
使用-r(route)參數(shù)可以查看路由相關(guān)信息,例如:
$netstat-rKernelIProutingtableDestinationGatewayGenmaskFlagsMSSWindowirttIfacedefault192.168.0.10.0.0.0UG000wlp3s0link-local*255.255.0.0U000wlp3s0192.168.0.0*255.255.255.0U000wlp3s0
當(dāng)然你也可以借助route命令完成這樣簡單的工作。
總結(jié)
netstat命令是我們定位網(wǎng)絡(luò)相關(guān)問題的利器,如果你還不會(huì)使用,那么最好花幾分鐘學(xué)習(xí)一下。netstat更詳細(xì)的字段解釋可以參考其手冊。
-
端口
+關(guān)注
關(guān)注
4文章
963瀏覽量
32052 -
netstat
+關(guān)注
關(guān)注
0文章
8瀏覽量
2075
原文標(biāo)題:不可不知的網(wǎng)絡(luò)命令:netstat
文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
評(píng)論