歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> 學習Linux >> linux關於網絡的命令介紹

linux關於網絡的命令介紹

日期:2017/3/3 17:35:54   编辑:學習Linux

linux關於網絡的命令介紹


熱度2 評論 39 www.BkJia.Com 網友分享於: 2017-02-10 07:02:59 浏覽數4376次

linux關於網絡的命令介紹


導讀本文將講述網絡相關命令,作者假定讀者具備TCP/IP協議棧的基礎知識。對於相關命令及其輸出只介紹它的基本的使用方法和大概的描述,具體協議將不作詳細解釋。

linux關於網絡的命令介紹linux關於網絡的命令介紹

如今網絡無疑是很重要的,linux系統中提供了豐富的網絡測試與管理命令。我們來一起看看它們。

內容如下:1、ping 發送TCMP回顯請求報文,並等待返回TCMP回顯應答。
ping[OPTIONS]...destination

這裡的目標destination可以是目的IP地址或者域名/主機名
選項-c指定發送請求報文的次數,當ping沒有任何選項時,在linux中默認將一直發送請求報文直到手動終止。

 [root@centos7~]#ping-c3www.baidu.com PINGwww.a.shifen.com(61.135.169.121)56(84)bytesofdata. 64bytesfrom61.135.169.121:icmp_seq=1ttl=52time=1.35ms 64bytesfrom61.135.169.121:icmp_seq=2ttl=52time=1.32ms 64bytesfrom61.135.169.121:icmp_seq=3ttl=52time=1.22ms ---www.a.shifen.compingstatistics--- 3packetstransmitted,3received,0%packetloss,time2003ms rttmin/avg/max/mdev=1.225/1.303/1.359/0.064ms

首先,ping程序會向域名服務器(DNS)發送請求,解析域名www.baidu.com的IP地址。DNS返回域名的一個別名www.a.shifen.com以及對應的IP地址61.135.169.121。之後ping程序開始向這個地址發送請求報文,每1s發送一個,ping收到ICMP回顯應答並將結果顯示在終端上,包括ICMP序列號(icmp_seq),生存時間(ttl)和數據包往返時間(time)。最後,給出匯總信息,包括報文總收發情況,總時間,往返時間最小值、平均值、最大值、平均偏差(越大說明網絡越不穩定)。

[root@centos7~]#pingwww.a.comping:unknownhostwww.a.com

當目的域名無法解析出IP地址時,會報未知主機的錯

[root@centos7~]#ping192.168.0.1PING192.168.0.1(192.168.0.1)56(84)bytesofdata.^C#這裡按CTRL+C鍵手動終止了進程---192.168.0.1pingstatistics---6packetstransmitted,0received,100%packetloss,time4999ms

當目的IP地址沒有路由時不會收到任何ICMP回顯報文

[root@centos7~]#ping-c210.0.1.2PING10.0.1.2(10.0.1.2)56(84)bytesofdata.From10.0.1.254icmp_seq=1DestinationHostUnreachableFrom10.0.1.254icmp_seq=2DestinationHostUnreachable---10.0.1.2pingstatistics---2packetstransmitted,0received,+2errors,100%packetloss,time999mspipe2

當有目的IP的路由但無法達到時顯示目標不可達錯誤(Destination Host Unreachable)。
ICMP回顯應答還包括超時(request time out)等其他類型。

2、hostname顯示或設置系統主機名
hostname[OPTIONS]...[NAME]

直接執行命令hostname時將顯示主機名:

[root@centos7temp]#hostnamecentos7[root@centos7temp]#

這個主機名是系統的gethostname(2)函數返回的。
可以通過執行命令hostname NAME來臨時改變主機名:

[root@centos7temp]#hostnameNAME[root@centos7temp]#hostnameNAME

這個臨時修改實際上是修改了linux kernel中一個同為hostname的內核參數,它保存在/proc/sys/kernel/hostname中。如果需要永久修改則需要修改配置文件/etc/sysconfig/network,centos7中需要修改/etc/hostname。需要注意的是,如果配置文件中的主機名是localhost或localhost.localdomain時,系統會取得網絡接口的IP地址,並用這個地址找出/etc/hosts文件中對應的主機名,然後將其設置成最終的hostname。

3、host DNS查詢
hostname

host命令通過配置文件/etc/resolv.conf中指定的DNS服務器查詢name的IP地址:

[root@centos7temp]#hostwww.baidu.comwww.baidu.comisanaliasforwww.a.shifen.com.www.a.shifen.comhasaddress61.135.169.121www.a.shifen.comhasaddress61.135.169.125
4、dig DNS

dig和host命令的語法一致,但提供了更詳細的信息和更多的選項:

[root@centos7~]#digwww.baidu.com;<<>>DiG9.9.4-RedHat-9.9.4-29.el7_2.2<<>>www.baidu.com;;globaloptions:+cmd;;Gotanswer:;;->>HEADER<<-opcode:QUERY,status:NOERROR,id:22125;;flags:qrrdra;QUERY:1,ANSWER:3,AUTHORITY:0,ADDITIONAL:0;;QUESTIONSECTION:;www.baidu.com.INA;;ANSWERSECTION:www.baidu.com.113INCNAMEwww.a.shifen.com.www.a.shifen.com.113INA61.135.169.125www.a.shifen.com.113INA61.135.169.121;;Querytime:2msec;;SERVER:223.5.5.5#53(223.5.5.5);;WHEN:四11月1012:31:20CST2016;;MSGSIZErcvd:90[root@centos7~]#

如只查詢域名的A記錄並以短格式顯示:

[root@centos7~]#digwww.baidu.comA+shortwww.a.shifen.com.61.135.169.12561.135.169.121[root@centos7~]#

或者:

[root@centos7~]#dig+nocmdwww.baidu.comA+noall+answerwww.baidu.com.252INCNAMEwww.a.shifen.com.www.a.shifen.com.252INA61.135.169.125www.a.shifen.com.252INA61.135.169.121

還可以用@server的方式指定DNS服務器:

[root@centos7~]#dig+noall+answerwww.baidu.comA@8.8.8.8www.baidu.com.21INCNAMEwww.a.shifen.com.www.a.shifen.com.263INA61.135.169.125www.a.shifen.com.263INA61.135.169.121

更多的命令及選項請自行man

5、traceroute或tracepath 路由跟蹤
[root@centos7~]#tracepathwww.baidu.com1?:[LOCALHOST]pmtu1500 1:10.0.1.1030.396ms 1:10.0.1.1030.350ms 2:210.51.161.11.187msasymm3 3:210.51.161.18.186ms 4:210.51.175.811.117ms 5:61.148.142.618.554msasymm12 6:61.148.147.131.694msasymm12 7:123.126.8.1173.934msasymm10 8:61.148.155.462.703msasymm10 ....

這裡只列出部分輸出,表示跟蹤到目的地址的路由,每一跳都返回。

6、ifconfig 配置網絡接口

當命令沒有任何參數時顯示所有網絡接口的信息:

[root@centos7~]#ifconfigens32:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500       inet172.20.71.254netmask255.255.255.0broadcast172.20.71.255       inet6fe80::250:56ff:fea4:fe34prefixlen64scopeid0x20<link>       ether00:50:56:a4:fe:34txqueuelen1000(Ethernet)       RXpackets11996157bytes775368588(739.4MiB)       RXerrors0dropped0overruns0frame0       TXpackets12bytes888(888.0B)       TXerrors0dropped0overruns0carrier0collisions0ens33:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet10.0.1.254netmask255.255.255.0broadcast10.0.1.255       inet6fe80::250:56ff:fea4:a09prefixlen64scopeid0x20ether00:50:56:a4:0a:09txqueuelen1000(Ethernet)  RXpackets20941185bytes1307830447(1.2GiB)    RXerrors0dropped0overruns0frame0 TXpackets147552bytes11833605(11.2MiB)   TXerrors0dropped0overruns0carrier0collisions0   lo:flags=73<UP,LOOPBACK,RUNNING>mtu65536   inet127.0.0.1netmask255.0.0.0 inet6::1prefixlen128scopeid0x10   looptxqueuelen1(LocalLoopback)    RXpackets0bytes0(0.0B)  RXerrors0dropped0overruns0frame0TXpackets0bytes0(0.0B)TXerrors0dropped0overruns0carrier0collisions0[root@centos7~]#

本例中顯示了兩個網卡ens32和ens33以及環回口lo的信息,包括mtu,ip地址,掩碼,mac地址,傳輸和接收數據量等等。
選項-s顯示精簡的信息:

[root@idc-v-71253~]#ifconfig-sens32IfaceMTURX-OKRX-ERRRX-DRPRX-OVRTX-OKTX-ERRTX-DRPTX-OVRFlgens3215001199695100012000BMRU

如給ens33增加一個新地址10.0.1.4:

[root@centos7~]#ifconfigens33:010.0.1.4/24up[root@centos7~]#ifconfigens33:0ens33:0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500     inet10.0.1.4netmask255.255.255.0broadcast10.0.1.255 ether00:50:56:a4:0a:09txqueuelen1000(Ethernet)命令中/24表明接口地址的掩碼,up表示啟用此接口。注意如果ip地址已經被使用,這裡依然會被設置成功,但此地址被訪問時,可能會有沖突。停用某接口:
[root@centos7~]#ifconfigens33:0down

如果需要永久增加或修改當前接口的地址,最好直接編輯網卡配置文件/etc/sysconfig/network-scripts/ifcfg-ens33(其他系統換成相應文件)中IPADDR字段,然後重啟網絡systemctl restart network或service network restart生效。

7、arp和arping

命令arp顯示系統的arp緩存,命令arping給鄰居主機發送ARP請求。

[root@idc-v-71253~]#arp-a?(10.0.1.1)at68:8f:84:01:f1:ff[ether]onens33?(10.0.1.102)at00:50:56:a4:18:9a[ether]onens33?(10.0.1.254)at00:50:56:a4:a9:16[ether]onens33?(10.0.1.10)at00:50:56:a4:d2:e4[ether]onens33?(10.0.1.104)at00:50:56:a4:37:a7[ether]onens33

?表示未知域名,最後的網卡名表示arp表項對應的網絡接口
如發現某地址不穩定,可以使用arping測試該地址是否為MAC地址沖突:

[root@centos7~]#arping10.0.1.252-Iens33ARPING10.0.1.252from10.0.1.254ens33Unicastreplyfrom10.0.1.252[00:50:56:A4:65:71]0.843msUnicastreplyfrom10.0.1.252[00:50:56:A4:0A:09]1.034ms

這裡兩條返回信息中的MAC地址不同,說明有兩塊網卡配置了相同的IP地址。選項-I指定發送arp請求的網絡接口。
如果剛剛更改了網卡的IP地址,但上游設備(如交換機)的arp表項還是老的,可以使用arping來強制刷新:

[root@centos7~]#arping-c3-Iens33-s10.0.1.25410.0.1.1ARPING10.0.1.1from10.0.1.254ens33Unicastreplyfrom10.0.1.1[68:8F:84:01:F1:FF]19.466msUnicastreplyfrom10.0.1.1[68:8F:84:01:F1:FF]2.358msUnicastreplyfrom10.0.1.1[68:8F:84:01:F1:FF]24.305msSent3probes(1broadcast(s))Received3response(s)

-c指定發送arp請求次數,-s指定源地址,最後的IP表示發送目標(這裡是網關地址)。

8、route 顯示或更改路由表
[root@centos7~]#routeKernelIProutingtableDestinationGatewayGenmaskFlagsMetricRefUseIface10.0.1.00.0.0.0255.255.255.0U000ens33link-local0.0.0.0255.255.0.0U100200ens32link-local0.0.0.0255.255.0.0U100300ens33172.20.71.00.0.0.0255.255.255.0U000ens32192.168.78.010.0.1.104255.255.255.0UG000ens33

其中Destination表示目的網段或目標主機;Gateway表示網關地址;Genmask表示目的網段的掩碼;Flags表示路由標志:U表示路由是啟用(up)的、G表示網關;Metric表示目標距離,通常用跳數表示;Ref表示路由的引用數;Use表示路由查找計數;Iface表示此條路由的出口。
選項-n表示用數字形式顯示目的網段
選項add和del表示添加或刪除一條路由。
選項-net和netmask表示指定目的網段及掩碼。
選項gw表示指定網關。
選項dev IF表示指定出口網卡
如增加一條到192.56.76.x的路由,使它的出口為ens32:

routeadd-net192.56.76.0netmask255.255.255.0devens32

如增加一條默認路由,指明它的網關為10.0.1.1

routeadddefaultgw10.0.1.1

如增加一條到172.20.70.0的路由,網關為10.0.1.2

routeadd-net172.20.70.0/24gw10.0.1.2

如刪除默認路由

routedeldefault
9、telnet 提供遠程登錄功能

由於telnet協議使用明文傳輸,在要求安全登錄的環境中並不適用。現在通常用它來進行網絡服務的端口測試:

[root@centos7~]#telnet10.0.1.25180Trying10.0.1.251...Connectedto10.0.1.251.Escapecharacteris'^]'.^] #這裡按了CTRL+],也可以按CTRL+C強行退出。telnet>quitConnectionclosed.

這裡對方的80端口是開啟並允許通信的。當對端端口沒有開啟時:

[root@centos7~]#telnet10.0.1.25181Trying10.0.1.251...telnet:connecttoaddress10.0.1.251:Noroutetohost

當對端拒絕連接時:

[root@centos7~]#telnet10.0.1.2518085Trying10.0.1.251...telnet:connecttoaddress10.0.1.251:Connectionrefused
10、ssh 遠程登錄程序
ssh[OPTIONS]...[user@]hostname[command]

ssh的全稱是Secure Shell,在不安全的網絡主機間提供安全加密的通信,旨在代替其他遠程登錄協議。

[root@centos7~]#ssh10.0.1.253Theauthenticityofhost'10.0.1.253(10.0.1.253)'can'tbeestablished.ECDSAkeyfingerprintis96:bd:a3:a7:87:09:1b:53:44:4c:9b:b9:5f:b2:97:89.Areyousureyouwanttocontinueconnecting(yes/no)?yes#這裡輸入yesWarning:Permanentlyadded'10.0.1.253'(ECDSA)[email protected]'spassword:#這裡輸入密碼Lastlogin:FriNov1109:04:012016from192.168.78.137[root@idc-v-71253~]##已登錄

當命令ssh後直接跟主機IP時表示使用默認用戶root登錄,如果是首次登錄,需要確認添加該主機的認證key,當輸入yes後,即會在本機/root/.ssh/known_hosts中增加一條該主機的記錄,下一次登錄時就不用再次確認了。然後需要輸入用戶密碼,通過驗證之後,我們就獲得了目的主機的一個shell,我們就可以在這個shell中執行命令了。
在新shell中輸入exit即可退回到原shell。
如果需要頻繁登錄某主機,但不想每次都輸入密碼,可以設置免密碼登錄:

[root@centos7~]#ssh-keygen-trsaGeneratingpublic/privatersakeypair.Enterfileinwhichtosavethekey(/root/.ssh/id_rsa):#回車Enterpassphrase(emptyfornopassphrase):#回車Entersamepassphraseagain:#回車Youridentificationhasbeensavedin/root/.ssh/id_rsa.#私鑰Yourpublickeyhasbeensavedin/root/.ssh/id_rsa.pub.#公鑰Thekeyfingerprintis:be:c3:d0:02:50:35:35:fe:60:d6:2f:26:96:f0:e1:e6root@centos7Thekey'srandomartimageis:+--[RSA2048]----+|...o.o||.oo||..*.||.*=.||..S+.||o=.o.||+E||o.||..|+-----------------+[root@centos7~]#[root@centos7~]#ssh-copy-id10.0.1.253/usr/bin/ssh-copy-id:INFO:attemptingtologinwiththenewkey(s),tofilteroutanythatarealreadyinstalled/usr/bin/ssh-copy-id:INFO:1key(s)remaintobeinstalled--ifyouarepromptednowitistoinstallthenewkeysroot@10.0.1.253'spassword:Numberofkey(s)added:1Nowtryloggingintothemachine,with:"ssh'10.0.1.253'"andchecktomakesurethatonlythekey(s)youwantedwereadded.[root@centos7~]#

其中命令ssh-keygen用來生成公鑰私鑰,選項-t指明密鑰類型。之後使用命令ssh-copy-id將公鑰發送至目標主機,這裡需要輸入目標主機用戶密碼。然後就可以免密碼登錄了:

[root@centos7~]#ssh10.0.1.253Lastlogin:FriNov1111:08:372016from10.0.1.254[root@idc-v-71253~]#

還可以通過ssh遠程執行命令:

[root@centos7~]#ssh10.0.1.252"hostname"[email protected]'spassword:#輸入密碼idc-v-71252#顯示命令結果[root@centos7~]##並不登錄

或者手動將公鑰拷貝至目標主機:

[root@centos7~]#cat/root/.ssh/id_rsa.pub|ssh10.0.1.252"cat->>/root/.ssh/authorized_keys"[email protected]'spassword:#輸入密碼[root@centos7~]#ssh10.0.1.252#免密登錄Lastlogin:ThuNov1014:42:112016from192.168.78.135[root@idc-v-71252~]#

選項-p為登錄指定端口:

[root@centos7temp]#ssh-p2210.0.1.252Lastlogin:FriNov1111:44:312016from10.0.1.254[root@idc-v-71252~]#

端口設置在服務端配置文件/etc/ssh/sshd_config中,默認端口號為22,如更改需將#Port 22去掉注釋並將22更改為需要的端口,然後重啟sshd服務service sshd restart或systemctl restart sshd。
如果需要使用另外的用戶登錄系統則執行ssh user@host
我們可以用tar命令結合ssh和管道,將本地(遠程)文件備份到遠程(本地):

tarzc/home/temp|sshuser@host"tarxz"#本地temp目錄備份到遠程sshuser@host"tarcz/home/temp"|tarxz#遠程temp目錄備份到本地

選項-L [bind_address:]port:host:hostport設置本地端口轉發

[root@centos7~]#ssh-L2222:10.0.1.252:2210.0.1.253Lastlogin:MonNov1410:34:432016from10.0.1.254[root@idc-v-71253~]##注意如果這裡exit斷開連接,則此轉發也將終止。

此命令的意思是綁定本地端口2222,並將所有發送至此端口的數據通過中間主機10.0.1.253轉發至目標主機10.0.1.252的22端口,此時如果用ssh登錄本機的2222端口,則實際登錄的是主機10.0.1.252

[root@centos7~]#ssh-p2222127.0.0.1Lastlogin:MonNov1410:34:562016from10.0.1.253[root@idc-v-71252~]#

這裡默認綁定的是本機的環回口127.0.0.1,如綁定到其他地址,則根據語法設置bind_address。
選項-N表示不執行命令,只設置端口轉發時有用
由於上述端口轉發命令ssh -L 2222:10.0.1.252:22 10.0.1.253會登錄到中間主機,並且退出後端口轉發也會終止,使用-N選項將不會登錄,再配合shell後台執行,將會是一個不錯的設置端口轉發的選擇(但要注意對中間主機需要免密碼登錄):

[root@centos7~]#ssh-N-L2222:10.0.1.252:2210.0.1.253&[1]12432[root@centos7~]#

命令最後的符號&表示此命令將在後台執行,返回的信息中[1]表示後台命令編號,12432表示命令的PID。(關於shell後台命令,以後的文章中會有敘述)
選項-R [bind_address:]port:host:hostport 設置遠程端口轉發
如我們在10.0.1.253上執行:

ssh-R2222:10.0.1.252:2210.0.1.254

然後在10.0.1.254上登錄:

[root@centos7~]#ssh-p2222localhostLastlogin:MonNov1410:40:442016from10.0.1.253[root@idc-v-71252~]#

這裡的意思是使遠程主機10.0.1.254(相對10.0.1.253來說)監聽端口2222,然後將所有發送至此端口的數據轉發至目標主機10.0.1.252的端口22。之後再在10.0.1.254登錄本地(localhost)的2222端口時,實際通過中間主機10.0.1.253登錄目標主機10.0.1.252。
選項-o OPTION指定配置文件(如/etc/ssh/sshd_config)內選項
如避免第一次登錄時輸入yes確認,可增加-o StrictHostKeyChecking=no。

11、scp 遠程復制文件
scp[OPTIONS]...[[user@]host1:]file1...[[user@]host2:]file2

scp命令通過ssh協議將數據加密傳輸,和ssh登錄類似,需要輸入遠程主機用戶密碼。
如將遠程主機10.0.1.253中文件/root/tcp.sh復制到本地當前目錄下:

[root@centos7~]#[email protected]:/root/a.txt./[email protected]'spassword:a.txt100%1250.1KB/s00:00[root@centos7~]#

命令會顯示傳輸狀態(傳輸百分比,大小,速度,用時)。
將本地文件復制到遠程無非是將源和目的調換位置。
選項-P指定遠端連接端口(ssh服務端口),-o ssh_option使用ssh選項。
選項-l limit傳輸限速,limit單位為Kbit/s。
和命令cp類似,選項-r表示復制目錄,-p表示保留文件權限時間等

12、netstat 打印網絡信息

選項-a顯示所有端口信息:

[root@centos7~]#netstat-aActiveInternetconnections(serversandestablished)ProtoRecv-QSend-QLocalAddressForeignAddressStatetcp000.0.0.0:ssh0.0.0.0:*LISTENtcp00localhost:smtp0.0.0.0:*LISTENtcp05210.0.1.254:ssh192.168.78.143:49583ESTABLISHEDtcp600[::]:commplex-main[::]:*LISTENtcp600[::]:4243[::]:*LISTENtcp600[::]:ssh[::]:*LISTENtcp600localhost:smtp[::]:*LISTENraw600[::]:ipv6-icmp[::]:*7raw600[::]:ipv6-icmp[::]:*7ActiveUNIXdomainsockets(serversandestablished)ProtoRefCntFlagsTypeStateI-NodePathunix2[ACC]STREAMLISTENING12807/run/systemd/privateunix2[ACC]STREAMLISTENING12815/run/lvm/lvmpolld.socketunix2[]DGRAM12818/run/systemd/shutdowndunix2[ACC]STREAMLISTENING16403/var/run/dbus/system_bus_socket....

這裡只顯示部分信息
選項-t顯示TCP連接信息
選項-n顯示IP地址而不進行域名轉換
選項-p顯示PID和程序名

[root@centos7~]#netstat-antpActiveInternetconnections(serversandestablished)ProtoRecv-QSend-QLocalAddressForeignAddressStatePID/Programnametcp000.0.0.0:220.0.0.0:*LISTEN1358/sshdtcp00127.0.0.1:250.0.0.0:*LISTEN2162/mastertcp05210.0.1.254:22192.168.78.143:49583ESTABLISHED12044/sshd:root@pttcp600:::5000:::*LISTEN17222/docker-proxytcp6       0      0 :::4243                 :::*                    LISTEN      16983/docker   tcp600:::22:::*LISTEN1358/sshdtcp600::1:25:::*LISTEN2162/master[root@centos7~]#

其中Proto表示協議(包括TCP、UDP等);Recv-Q和Send-Q表示接收和發送隊列,一般都為0,如果非0則表示本地的接收或發送緩存區有數據等待處理;Local Address和Foreign Address分別表示本地地址和遠端地址;State表示連接狀態,對應於TCP各種連接狀態;PID/Program name表示進程號和程序名。
選項-l表示只顯示狀態為LISTEN的連接

[root@centos7~]#netstat-ntlActiveInternetconnections(onlyservers)ProtoRecv-QSend-QLocalAddressForeignAddressStatetcp000.0.0.0:220.0.0.0:*LISTENtcp00127.0.0.1:250.0.0.0:*LISTENtcp600:::5000:::*LISTENtcp600:::4243:::*LISTENtcp600:::22:::*LISTENtcp600::1:25:::*LISTEN[root@centos7~]#

選項-u表示顯示UDP連接信息
選項-r表示顯示路由信息

[root@centos7~]#netstat-rKernelIProutingtableDestinationGatewayGenmaskFlagsMSSWindowirttIfacedefault10.0.1.1030.0.0.0UG000ens3310.0.1.00.0.0.0255.255.255.0U000ens33172.20.71.00.0.0.0255.255.255.0U000ens32192.168.78.010.0.1.104255.255.255.0UG000ens33

選項-i顯示接口信息

[root@centos7~]#netstat-iKernelInterfacetableIfaceMTURX-OKRX-ERRRX-DRPRX-OVRTX-OKTX-ERRTX-DRPTX-OVRFlgens3215001319610707703246000BMRUens3315002531238808802516050000BMRUlo6553625035890002503589000LRU
13、tcpdump 網絡抓包工具

命令tcpdump捕獲某網絡接口符合表達式expression的數據包,並打印出數據包內容的描述信息。
選項-i指定網卡:

[root@idc-v-71253~]#tcpdump-iens33tcpdump:verboseoutputsuppressed,use-vor-vvforfullprotocoldecodelisteningonens33,link-typeEN10MB(Ethernet),capturesize65535bytes15:41:59.121948IP10.0.1.108.3693>239.100.1.1.websm:UDP,length5815:41:59.122191IP10.0.1.109.35673>239.100.1.1.websm:UDP,length5715:41:59.128282IP10.0.1.253.ssh>192.168.78.143.51694:Flags[P.],seq749565300:749565496,ack3522345564,win255,length19615:41:59.134127IP192.168.78.143.51694>10.0.1.253.ssh:Flags[.],ack196,win3977,length015:41:59.140319ARP,Requestwho-has10.0.1.31tell10.0.1.102,length4615:41:59.168328ARP,Requestwho-has10.0.1.37tell10.0.1.102,length4615:41:59.262235ARP,Requestwho-has192.168.10.150tell192.168.10.151,length4615:41:59.622090IP10.0.1.108.3693>239.100.1.1.websm:UDP,length5815:41:59.622178IP10.0.1.109.35673>239.100.1.1.websm:UDP,length57....

啟動命令之後顯示出可以使用-v或-vv顯示更詳細的信息,開始從ens33捕獲數據包。輸出顯示出各個發送或接收數據包包頭信息(包括ARP、IP、TCP、UDP等等協議)。此命令並未指定expression,所以默認將捕獲所有數據包。
如果需要將數據包捕獲然後通過其他程序(如wireshark)分析,可以使用選項-w file將數據寫入文件,同時還需要使用選項-s 0指定能夠捕獲的數據包大小為65535字節,以避免數據包被截斷而無法被分析。
真實環境中,流經網卡的數據包量是巨大的。可以使用表達式來對數據包進行過濾,對於每個數據包,都要經過表達式的過濾,只有表達式的值為true時,才會輸出。
expression中可以包含一到多個關鍵字指定的條件,可以使用and(或&&)、or(或||)、not(或!)和括號()表示各個關鍵字間的邏輯關系,可以用>、<表示比較,還可以進行計算。其中關鍵字包括:
type類型關鍵字,如host、net、port和portrange,分別表示主機、網段、端口號、端口段。
direction方向關鍵字,如src、dst分別表示源和目的。
proto協議關鍵字,如fddi、arp、ip、tcp、udp等分別表示各種網絡協議。
由於篇幅所限,下面的例子中將只描述選項和表達式所起到的作用,不再解釋輸出內容:

tcpdump-iens33dsthost10.0.1.251#監視所有從端口ens33發送到主機10.0.1.251的數據包,主機也可以是主機名tcpdump-ieth0host!211.161.223.70and!211.161.223.71anddstport80#監聽端口eth0,抓取不是來自或去到主機211.161.223.70和211.161.223.71並且目標端口為80的包tcpdumptcpport23host210.27.48.1#獲取主機210.27.48.1接收或發出的telnet包tcpdump'tcpport80and(((ip[2:2]-((ip[0]&0xf)<<2))-((tcp[12]&0xf0)>>2))!=0)andsrcnet(183.60.190or122.13.220)'-s0-ieth0-wipdump#抓取源或目的端口是80,且源網絡是(183.60.190.0/24或者122.13.220.0/24),並且含有數據,而不是SYN,FIN以及ACK-only等不含數據的TCP數據包寫入文件ipdump#注意這裡表達式使用單引號引起來以避免其中的特殊字符被shell解析而造成語法錯誤tcpdump'tcp[tcpflags]&(tcp-syn|tcp-fin)!=0and!srcanddstnet10.0.0'#只打印TCP的開始和結束包(SYN和FIN標記),並且源和目標網段均不是10.0.0.0/24tcpdump'gateway10.0.1.1andip[2:2]>576'#表示抓取發送至網關10.0.1.1並且大於576字節的IP數據包

網絡相關命令內容較多,希望能夠幫到你。

原文來自:http://os.51cto.com/art/201612/524450.htm

本文地址:http://www.linuxprobe.com/linux-net-command.html


http://www.bkjia.com/Linuxjc/1191949.html TechArticle

Copyright © Linux教程網 All Rights Reserved