如何用Linux命令行管理網絡
無論你是要下載文件、診斷網絡問題、管理網絡接口,還是查看網絡的統計數據,都有終端命令可以來完成。本文中收集了一些你必須知道的命令,幫你搞定網絡難題。
網絡狀態查看命令(以下三個命令需要net-tools工具包)
ifconfig查看網卡基本信息 inet為ip地址 netmask為子網掩碼 ether為MAC地址 lo網卡為本地換回地址127.0.0.1
mii-tool查看網卡物理鏈接情況
route 查看網關 -n 不解析域名(速度會更快)
更改網卡名為eth0(方便服務器端批量處理)
1 修改/etc/default/grub設置GRUB_CMDLINE_LINUX_DEFAULT= "iosdevname=0 net.ifname=0"
2 更新grub grub-mkconfig -o /boot/grub/grub.cfg
3 重啟 reboot
修改網絡配置
ifconfig
ifconfig <網卡> <ip地址> [network <掩碼>] 修改網卡ip地址(也可以順道修改掩碼)
ifup <網卡> 啟用網卡 ifdown <網卡> 關掉網卡 (一般不需要設置)
route
route add default gw <網關ip> 修改默認網關
route del default gw <網關ip> 刪掉默認網關
route add -host <ip1> gw <ip2> 去往ip1的走網關ip2
route add -net <ip1> network <ip2> gw <ip3> 去往子網掩碼為ip2 的網段ip1 走ip3
linux的ip命令和ifconfig類似,但前者功能更強大,並旨在取代后者。使用ip命令,只需一個命令,你就能很輕松地執行一些網絡管理任務。ifconfig是net-tools中已被廢棄使用的一個命令,許多年前就已經沒有維護了。iproute2套件里提供了許多增強功能的命令,ip命令即是其中之一。所以我們就着重介紹IP這個命令啦~
IP
ip是iproute2軟件包里面的一個強大的網絡配置工具 ip命令的用法如下: ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]] 其中,OPTIONS是一些修改ip行為或者改變其輸出的選項。所有的選項都是以-字符開頭,分為長、短兩種形式。目前,ip支持如下選項: -V,-Version 打印ip的版本並退出。 -s,-stats,-statistics 輸出更為詳盡的信息。如果這個選項出現兩次或者多次,輸出的信息將更為詳盡。 -f,-family 這個選項后面接協議種類,包括:inet、inet6或者link,強調使用的協議種類。如果沒有足夠的信息告訴ip使用的協議種類,ip就會使用默認值inet或者any。link比較特殊,它表示不涉及任何網絡協議。 -4 是-family inet的簡寫。 -6 是-family inet6的簡寫。 -0 是-family link的簡寫。 -o,-oneline 對每行記錄都使用單行輸出,回行用字符代替。如果你需要使用wc、grep等工具處理ip的輸出,會用到這個選項。 -r,-resolve 查詢域名解析系統,用獲得的主機名代替主機IP地址。 OBJECT是你要管理或者獲取信息的對象。目前ip認識的對象包括: link 網絡設備 address 一個設備的協議(IP或者IPV6)地址 neighbour ARP或者NDISC緩沖區條目 route 路由表條目 rule 路由策略數據庫中的規則 maddress 多播地址 mroute 多播路由緩沖區條目 tunnel IP上的通道 另外,所有的對象名都可以簡寫,例如:address可以簡寫為addr,甚至是a。 COMMAND設置針對指定對象執行的操作,它和對象的類型有關。一般情況下,ip支持對象的增加(add)、刪除(delete)和展示(show或者list)。有些對象不支持所有這些操作,或者有其它的一些命令。對於所有的對象,用戶可以使用help命令獲得幫助。這個命令會列出這個對象支持的命令和參數的語法。如果沒有指定對象的操作命令,ip會使用默認的命令。一般情況下,默認命令是list,如果對象不能列出,就會執行help命令。 ARGUMENTS是命令的一些參數,它們倚賴於對象和命令。ip支持兩種類型的參數:flag和parameter。flag由一個關鍵詞組成;parameter由一個關鍵詞加一個數值組成。為了方便,每個命令都有一個可以忽略的默認參數。例如,參數dev是ip link命令的默認參數,因此ip link ls eth0等於ip link ls dev eth0。我們將在后面的章節詳細介紹每個命令的使用,命令的默認參數將使用default標出。
實用例子
[root@linux ~]# ip link set dev eth0 up #up/down 起動/關閉設備 [root@linux ~]# ip link set dev eth0 txqueuelen 100 #改變設備傳輸隊列的長度 [root@linux ~]# ip link set dev eth0 mtu 1500 #改變網絡設備MTU(最大傳輸單元)的值 [root@linux ~]# ip link set dev eth0 address 00:01:4f:00:15:f1 #修改網絡設備的MAC地址 [root@linux ~]# ip -s -s link ls eth0 #查看eth0網卡信息 等同於ifconfig eth0 [root@linux ~]# ip addr add local 192.168.4.1/28 brd + label eth0:1 dev eth0 #為每個地址設置一個字符串作為標簽 [root@linux ~]# ip addr add 192.168.4.2/24 brd + dev eth1 label eth1:1 #在以太網接口eth0上增加一個地址192.168.4.2,掩碼長度為24位(155.155.155.0),標准廣播地址,標簽為eth0:Alias [root@linux ~]# ip addr del 192.168.4.1/24 brd + dev eth0 label eth0:1 #ip address delete--刪除一個協議地址. 縮寫:delete、del、d [root@linux ~]# ip addr ls eth0 #ip address show--顯示協議地址. 縮寫:show、list、lst、sh、ls、l [root@linux ~]# ip -s -s a f to 10/8 #刪除屬於私網10.0.0.0/8的所有地址 [root@linux ~]# ip -4 addr flush label "eth0" #取消所有以太網卡的IP地址 [root@linux ~]# ip neigh add 10.0.0.3 lladdr 0:0:0:0:0:1 dev eth0 nud perm #在設備eth0上,為地址10.0.0.3添加一個permanent ARP條目 [root@linux ~]# ip neigh chg 10.0.0.3 dev eth0 nud reachable #把狀態改為reachable [root@linux ~]# ip neigh del 10.0.0.3 dev eth0 #刪除設備eth0上的一個ARP條目10.0.0.3
[root@linux ~]# ip route add 192.168.10.0/24 dev eth1 #添加192.168.10.0/24網段轉發到eth1
(添加到達目標主機的路由記錄: ip route add 目標主機 via 網關
添加到達網絡的路由記錄:ip route add 目標網絡/掩碼 via 網關
添加默認路由:ip route add default via 網關
例如增加一條到達主機10.2.111.110的路由,網關是10.1.111.110:ip route add 10.2.111.110 via 10.1.111.110
3、刪除路由:ip route del 目標網絡/掩碼 ip route del default [via 網關]
4、清空路由表: ip route flush
)
[root@linux ~]# ip route #打印路由表
[root@linux ~]# ip route del 192.168.10.0/24 dev eth1 #移除192.168.10.0/24網段轉發到eth1
[root@linux ~]# ip route get 10.0.0.3 dev eth0 #假設現在你有一個IP地址,你需要知道路由包從哪里來。可以使用下面的路由選項(譯注:列出了路由所使用的接口等
網絡故障排除命令
ping
ping 程序使用 ICMP 協議的強制回顯請求數據報以使主機或網關發送一份 ICMP 的回顯應答。回顯請求數據報(" pings ")含有一個 IP 及 ICMP 的報頭,后跟一個``時間值關鍵字然后是一段任意長度的填充字節用於把保持分組長度為16的整數倍。以下是程序的選項:
ping [ -LRUbdfnqrvR ] [ -c count ] [ -i wait ] [ -l preload ] [ -p pattern ] [ -s packetsize ]

參數 -c count 在發送(和接收)了正好數量為 count 的回顯應答分組后停止操作。在發送了 count 個分組后沒有收到任何分組的特別情況是發送導致了終止(選程主機或網關不可達)。 -d 在所用的套接字上使用SO_DEBUG 選項。 -f 以高速方式來作ping 。以分組返回的速度來輸出其它分組或每秒輸出百次。當收到每個回顯應答並打印一個退格符時,對每個回顯請求都打印一個句點``.。這可以快速顯示出丟棄了多少個分組,只有超級用戶可以用這個選項。這(操作)對網絡要求非常苛刻,應該慎重使用。 -i wait 在發送每個分組時等待 wait 個秒數。缺省值為每個分組等待一秒。此選項與-f選項不能同時使用。 -l preload 如果指定 preload ,那么 ping 程序在開始正常運行模式前盡可能快地發送分組。同樣只有超級用戶可以用這個選項。 -n 只以數字形式輸出信息。這樣就不嘗試去查找主機名了。 -p pattern 可以指定最多16個填充字節用於保持分組長度為16的整數倍。在網絡上診斷與數據相關問題時此選項很有用。例如``-p ff將使發出的分組都用全1填充數據區。 -q 靜態輸出。在程序啟動和結束時只顯示摘要行。 -R 記錄路由。在回顯請求分組中包含記錄路由選項並在相應的分組返回時顯示路由緩沖區。注意IP首部的容量只能存放9條這樣的路由。很多主機忽略或禁用此選項。 -r 在所連接的網絡上旁路正常的選路表,直接向主機發送分組。如果主機未處於直接相連的網絡上,那么返回一個錯誤。此選項可用來通過無路由接口對一台主機進行檢測(例如當接口已被routed 程序丟棄后)。 -s packetsize 指定要發送數據的字節量。缺省值為 56 ,這正好在添加了 8 字節的 ICMP 首部后組裝成 64 字節的 ICMP 數據報。 詳細模式輸出。打印接收到的回顯應答以外的ICMP分組。 -t 設置存活數值TTL的大小-v -w waitsecs 在 waitsecs 秒后停止 ping 程序的執行。當試圖檢測不可達主機時此選項很有用。 當用ping來隔離故障時,應首先在本地主機上運行,以檢查本地網絡接口有效 運行。然后,應該進一步檢查主機和網關。計算出往返時間和分組丟失率。如 果收到重復的分組,雖然這些分組的往返時間要用於計算往返時間的最小/平均 /最大值,但是它們不應該算在剛才計算的丟失的分組中。當指定數量的分組已 經發送(和接收)時或如果程序被SIGINT信號終止,會顯示一份簡短的摘要。 如果ping程序根本沒有收到任何返回分組,那它將以返回碼1退出。出錯時返回 2。否則返回0。這些值可能用於查看主機存在與否。 此程序專用於網絡測試,度量和管理。因為它會使用網絡的流量,在正常操作或 自動的腳本中使用它並不明智。
實例
[root@localhost ~]# ping -c 5 -i 0.5 baidu.com # 指定次數和時間,間隔ping baidu [root@localhost ~]# ping -i 0.2 -c 30 -I 192.168.10.208 180.149.132.47 -q # -i 指定發送數據包時間間隔,-c 指定一共發送多少個數據包,-I 指定源地址,-q指定直接顯示程序的啟動和最后結果
[root@localhost ~]# ping -i 3 -s 1024 -t 255 192.168.120.206 # -i 3 發送周期為 3秒 -s 設置發送包的大小為1024 -t 設置TTL值為 255
[root@localhost ~]# ping -I 192.168.1.112 192.168.1.121 -w 3 #-I 網絡界面:使用指定的網絡界面送出數據包,即192.168.1.112是發出ping命令的主機IP地址,192.168.1.121是被ping的主機的IP地址。-w 等待指定時間后停止ping程序的執行。當試圖測試不可達主機時此選項很有用,時間單位是秒。
[root@localhost ~]# ping -c 1 -W 2 192.168.0.100 # -c 1發送一個包,-W 2超時2秒不到達主機停止
tracepath & traceroute
tracepath 用來追蹤連接到目標地址的所經過的路由信息,同時還能夠發現MTU值。它跟蹤路徑到目的地,沿着這條路徑發現MTU。它使用UDP端口或一些隨機端口。它類似於Traceroute,只是不需要超級用戶特權,並且沒有花哨的選項。
tracepath很好地替代了tracerout和Linux錯誤隊列應用程序的典型示例。tracepath的情況更糟,因為商用IP路由器在ICMP錯誤消息中沒有返回足夠的信息。很可能,當它們被更新的時候,它會改變

tracepath [ -n] [ -l pktlen] destination [ port]
選項列表
選項說明
-n 不查看主機名字 -l 設置初始化的數據包長度,默認65535
[root@linux ~]# tracepath www.google.cn 1: 192.168.0.3 (192.168.0.3) 0.709ms pmtu 1500 1: 192.168.0.1 (192.168.0.1) 0.908ms 2: 192.168.0.1 (192.168.0.1) asymm 1 0.199ms pmtu 1480 3: 222.247.28.49 (222.247.28.49) 64.933ms 4: 61.137.2.169 (61.137.2.169) 91.804ms 5: 202.97.46.29 (202.97.46.29) 137.155ms 6: 202.97.35.173 (202.97.35.173) 199.915ms 7: 202.97.53.130 (202.97.53.130) asymm 11 243.512ms 8: no reply
traceroute指令讓你追蹤網絡數據包的路由途徑,預設數據包大小是40Bytes。

-d 使用Socket層級的排錯功能。 -f<存活數值> 設置第一個檢測數據包的存活數值TTL的大小。 -F 設置勿離斷位。 -g<網關> 設置來源路由網關,最多可設置8個。 -i<網絡界面> 使用指定的網絡界面送出數據包。 -I 使用ICMP回應取代UDP資料信息。 -m<存活數值> 設置檢測數據包的最大存活數值TTL的大小。 -n 直接使用IP地址而非主機名稱。 -p<通信端口> 設置UDP傳輸協議的通信端口。 -q 設置每一跳的探測包數量。默認是3 。 -r 忽略普通的Routing Table,直接將數據包送到遠端主機上。 -s<來源地址> 設置本地主機送出數據包的IP地址。 -t<服務類型> 設置檢測數據包的TOS數值。 -T 使用tcp syn 來探測 -U 使用UDP報文探測 -v 詳細顯示指令的執行過程。 -w<超時秒數> 設置等待遠端主機回報的時間。 -x 開啟或關閉數據包的正確性檢驗。
[root@localhost ~]# traceroute baidu.com #最常用的方法 [root@localhost ~]# traceroute -m 10 baidu.com #把跳數設置為10次; [root@localhost ~]# traceroute -n baidu.com #顯示IP地址,不查主機名 [root@localhost ~]# traceroute -p 6888 baidu.com #探測包使用的基本UDP端口設置6888 [root@localhost ~]# traceroute -q 4 baidu.com #把探測包的個數設置為值4 [root@localhost ~]# traceroute -r baidu.com #繞過正常的路由表,直接發送到網絡相連的主機 [root@localhost ~]# traceroute -w 3 baidu.com #把對外發探測包的等待響應時間設置為3秒
mtr
Mtr是 Linux中有一個非常棒的網絡連通性判斷工具,它結合了ping, traceroute,nslookup 的相關特性。
安裝mtr工具(根據自己系統包管理工具安裝)
apt-get install mtr -y yum install mtr -y

mtr -s 用來指定ping數據包的大小 mtr -nno-dns 不對IP地址做域名解析 mtr -a 來設置發送數據包的IP地址 這個對一個主機由多個IP地址是有用的 mtr -i 使用這個參數來設置ICMP返回之間的要求默認是1秒 mtr -4 IPv4 mtr -6 IPv6 3.Mtr的輸出詳解: mtr 8.8.8.8 使用命令測試到google DNS的連通性 My traceroute [v0.75] hybird (0.0.0.0) Tue Nov 1 23:06:00 2011 Keys: Help Display mode Restart statistics Order of fields quit Packets Pings Host Loss% Snt Last Avg Best Wrst StDev 1. 121.52.213.161 0.0% 25 0.7 2.2 0.6 13.7 3.0 2. 10.0.20.37 0.0% 25 0.8 0.8 0.6 1.2 0.1 3. 61.50.163.249 0.0% 24 1.2 1.7 1.1 4.8 1.0 4. bt-204-129.bta.net.cn 0.0% 24 1.2 4.3 1.0 49.5 11.1 5. 124.65.60.137 0.0% 24 1.1 1.1 0.9 1.6 0.1 6. 61.148.156.57 0.0% 24 2.4 2.5 1.8 9.3 1.5 7. 202.96.12.89 0.0% 24 4.3 5.4 2.3 38.8 7.8 8. 219.158.15.14 0.0% 24 52.1 42.4 41.3 52.1 2.2 9. 219.158.3.74 0.0% 24 75.4 75.7 58.1 86.4 6.9 10. 219.158.96.246 0.0% 24 34.5 33.9 33.0 37.8 1.0 11. 219.158.3.238 0.0% 24 99.0 93.6 77.8 102.0 5.7 12. 72.14.215.130 0.0% 24 39.1 38.3 36.3 48.9 2.9 13. 64.233.175.207 4.2% 24 36.7 42.4 36.5 84.2 13.6 14. 209.85.241.56 0.0% 24 36.7 43.1 36.3 91.8 16.6 209.85.241.58 15. 216.239.43.17 0.0% 24 37.3 40.1 37.0 56.4 6.3 209.85.253.69 209.85.253.71 216.239.43.19 16. 216.239.48.238 0.0% 24 38.5 41.6 37.1 50.3 4.6 216.239.48.234 216.239.48.226 216.239.48.230 17. google-public-dns-a.google.com 0.0% 24 37.6 37.8 37.2 39.8 0.7 以上報告示例說明: 第一列:顯示的是IP地址和本機域名,這點和traceroute很像 第二列:snt:10 設置每秒發送數據包的數量,默認值是10 可以通過參數 -c來指定。其中-c的說明是:–report-cycles COUNT 第三列:是顯示的每個對應IP的丟包率 第四列:顯示的最近一次的返回時延 第五列:是平均值 這個應該是發送ping包的平均時延 第六列:是最好或者說時延最短的 第七列:是最差或者說時延最常的 第八列:是標准偏差
實例演示
[root@localhost]# mtr -r www.baidu.com HOST: vpn208 Loss% Snt Last Avg Best Wrst StDev 1. 192.168.10.1 0.0% 10 0.4 0.4 0.3 0.4 0.0 2. 101.81.96.1 0.0% 10 307.6 562.0 307.6 790.5 154.4 3. 124.74.124.157 0.0% 10 6.4 5.4 3.0 6.7 1.1 4. 101.95.42.201 0.0% 10 7.1 5.7 3.7 7.4 1.2 5. 202.101.63.130 0.0% 10 11.8 5.9 3.4 11.8 2.4 6. 202.97.68.142 0.0% 10 7.4 8.4 7.0 9.7 1.2 7. 220.191.200.98 0.0% 10 5.9 7.4 5.9 14.0 2.5 8. ??? 100.0 10 0.0 0.0 0.0 0.0 0.0 9. 115.239.209.6 0.0% 10 6.4 7.0 6.4 7.9 0.5 10. ??? 100.0 10 0.0 0.0 0.0 0.0 0.0 11. 115.239.210.27 0.0% 10 6.2 7.5 5.7 14.8 2.7 第一列:顯示的是IP地址和本機域名,這點和tracert很像。 第二列 Loss%:是顯示的每個對應IP的丟包率。 第三列 snt:snt等於10,設置每秒發送數據包的數量,默認值是10 可以通過參數 -c來指定。 第四列 Last:顯示的最近一次的返回時延。 第五列 Avg:平均值,這個應該是發送ping包的平均時延。 第六列 Best:最好或者說時延最短的時間。 第七列 Wrst:最壞或者說時延最長的時間。 第八列 StDev:標准偏差。 # mtr -r -c 30 www.baidu.com #設置每秒發送數據包的數量30 # mtr -r -c 30 -s 1024 www.baidu.com #設置ping包大小為1024個字節。
host
host 命令:用於查詢DNS的工具,它通過常轉換指定主機名稱的主機名稱為IP地址。當不指定參數時,它顯示host命令的幫助信息

-a 等同於“-v -t” -C 在需要認證的域名服務器上查找SOA記錄 -d 等同於“-v” -l 列出一個域內所有的主機 -i 反向查找 -N 改變點數 -r 不使用遞歸處理 -R 指定UDP包數 -T 支持TCP/IP模式 -v 運行時顯示詳細的處理信息 -w 永遠等待回復 -W 指定等待回復的時間 -4 用於IPv4的查詢 -6 用於IPv6的查詢 -c<類> 查詢類 -t<類型> 指定類型,包括a、all、mx、ns
實例演示
[root@localhost ~]# host g.cn #查詢谷歌中國的DNS g.cn has address 203.208.37.104 g.cn has address 203.208.37.99 [root@localhost ~]# host -a g.cn #查詢詳細信息 Trying 'g.cn' ;; ->>HEADER<<- opcode:="" query="" status:="" noerror="" id:="" 36589="" flags:="" qr="" rd="" ra="" query:="" 1="" answer:="" 2="" authority:="" 0="" additional:="" 0="" question="" section:="" g="" cn="" in="" any="" answer="" section:="" g="" cn="" 203="" in="" a="" 203="" 208="" 37="" 99="" g="" cn="" 203="" in="" a="" 203="" 208="" 37="" 104="" received="" 54="" bytes="" from="" 202="" 103="" 96="" 112="" 53="" in="" 93="" ms="" root="" localhost="" host="" -a="" baidu="" com="" 8="" 8="" 8="" 8="" dns="" trying="" baidu="" com="" using="" domain="" server:="" name:="" 8="" 8="" 8="" 8="" address:="" 8="" 8="" 8="" 8="" 53="" aliases:="" -="">>HEADER<<- opcode: QUERY, status: NOERROR, id: 58720 ;; flags: qr rd ra; QUERY: 1, ANSWER: 9, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;baidu.com. IN ANY ;; ANSWER SECTION: baidu.com. 7200 IN SOA dns.baidu.com. sa.baidu.com. 2010052501 300 300 2592000 7200 baidu.com. 600 IN A 220.181.6.81 baidu.com. 600 IN A 220.181.6.184 baidu.com. 600 IN A 61.135.163.94 baidu.com. 7200 IN MX 10 mx1.baidu.com. baidu.com. 86400 IN NS ns2.baidu.com. baidu.com. 86400 IN NS ns4.baidu.com. baidu.com. 86400 IN NS ns3.baidu.com. baidu.com. 86400 IN NS dns.baidu.com. Received 206 bytes from 8.8.8.8#53 in 172 ms [root@localhost ~]# host -t MX 126.cn #查詢郵件 交換機記錄 126.cn mail is handled by 10 696737754.pamx1.hotmail.com.
whois
語 法:whois[選擇參數][必要參數]
功 能:用來查找並顯示指定用戶賬號、域名相關信息,包括域名注冊時間、擁有者、郵箱等,類似命令:tracepath、host、nslookup、who、pwd。

-a 搜尋所有數據庫 -c 找到最小的包含一個 mnt-irt 屬性的匹配 -d 同時返回 DNS 反向查詢的代理對象(需支持RPSL協議) -F 快速輸出原始數據 -H 隱藏法律聲明內容 -i ATTR 進行一次反向查詢 -l 將精確度降低一級的查詢 (需支持RPSL協議) -L 找到所有低精確度匹配 -m 找到第一級較高精確度匹配 -M 找到所有較高精確度匹配 -r 查詢聯系信息時關閉遞歸查詢 -R 顯示本地域名對象副本 -x 精確匹配 -h[主機] 連接到指定 HOST 服務器 -p[端口] 連接到指定 PORT 端口 -t[類型] 查詢指定類型對象頭信息 -T[類型] 查找指定類型的對象 -v[類型] 查詢指定類型對象冗余信息 -q [版本|類型] 查詢特定的服務器信息(需支持RPSL協議)
實例演示
[root@localhost www]# whois root #顯示指定用戶信息 [root@localhost www]# whois baidu.com #查詢域名描述信息 [root@localhost www]# whois baidu.com #查詢域名信息 [root@localhost www]# whois -H baidu.com #查詢域名信息省略法律聲明 [root@localhost www]# whois -p 80 baidu.com #指定端口查詢
dhclient
dhclient命令使用動態主機配置協議動態的配置網絡接口的網絡參數。

-4 : 使用DHCPv4 -6 : 使用DHCPv6 -d:總是以前台方式運行程序; -q:安靜模式,不打印任何錯誤的提示信息; -r:釋放ip地址。
# dhclient -r #釋放IP
# dhclient #獲取IP
netstat
netstat - 顯示網絡連接,路由表,接口狀態,偽裝連接,網絡鏈路信息和組播成員組.
netstat [address_family_options] [--tcp|-t] [--udp|-u] [--raw|-w] [--listening|-l] [--all|-a] [--numeric|-n] [--numeric-hosts][--numeric-ports][--numeric-ports] [--symbolic|-N] [--extend|-e[--extend|-e]] [--timers|-o] [--programs|-p] [--verbose|-v] [--continuous|-c] [delay] netstat {--route|-r} [address_family_options] [--extend|-e[--extend|-e]] [--verbose|-v] [--numeric|-n] [--numeric-hosts][--numeric-ports][--numeric-ports] [--continuous|-c] [delay] netstat {--interfaces|-i} [iface] [--all|-a] [--extend|-e[--extend|-e]] [--verbose|-v] [--programs|-p] [--numeric|-n] [--numeric-hosts][--numeric-ports][--numeric-ports] [--continuous|-c] [delay] netstat {--groups|-g} [--numeric|-n] [--numeric-hosts][--numeric-ports][--numeric-ports] [--continuous|-c] [delay]netstat {--masquerade|-M} [--extend|-e] [--numeric|-n] [--numeric-hosts][--numeric-ports][--numeric-ports] [--continuous|-c] [delay] netstat {--statistics|-s} [--tcp|-t] [--udp|-u] [--raw|-w] [delay] netstat {--version|-V} netstat {--help|-h} address_family_options:
[--protocol={inet,unix,ipx,ax25,netrom,ddp}[,...]] [--unix|-x] [--inet|--ip] [--ax25] [--ipx] [--netrom] [--ddp]
Netstat 程序顯示Linux網絡子系統的信息。 輸出信息的類型是由第一個參數控制的,就像這樣
(none)
無選項時, netstat 顯示打開的套接字. 如果不指定任何地址族,那么打印出所有已配置地址族的有效套接字
--route , -r
顯示內核路由表。
--groups , -g
顯示IPv4 和 IPv6的IGMP組播組成員關系信息。
--interface=iface , -i
顯示所有網絡接口列表或者是指定的 iface 。
--masquerade , -M
顯示一份所有經偽裝的會話列表。
--statistics , -s
顯示每種協議的統計信息。
選項 OPTIONS

--verbose , -v 詳細模式運行。特別是打印一些關於未配置地址族的有用信息。 [[ ]] --numeric , -n 顯示數字形式地址而不是去解析主機、端口或用戶名。 [[ ]] --numeric-hosts 顯示數字形式的主機但是不影響端口或用戶名的解析。 [[ ]] --numeric-ports 顯示數字端口號,但是不影響主機或用戶名的解析。 [[ ]] --numeric-users 顯示數字的用戶ID,但是不影響主機和端口名的解析。 [[ ]] --protocol=family , -A 指定要顯示哪些連接的地址族(也許在底層協議中可以更好地描述)。 family 以逗號分隔的地址族列表,比如 inet , unix , ipx , ax25 , netrom , 和 ddp 。 這樣和使用 --inet , --unix ( -x ), --ipx , --ax25 , --netrom, 和 --ddp 選項效果相同。 地址族 inet 包括raw, udp 和tcp 協議套接字。 [[ ]] -c, --continuous 將使 netstat 不斷地每秒輸出所選的信息。 [[ ]] -e, --extend 顯示附加信息。使用這個選項兩次來獲得所有細節。 [[ ]] -o, --timers 包含與網絡定時器有關的信息。 [[ ]] -p, --programs 顯示套接字所屬進程的PID和名稱。 [[ ]] -l, --listening 只顯示正在偵聽的套接字(這是默認的選項) [[ ]] -a, --all 顯示所有正在或不在偵聽的套接字。加上 --interfaces 選項將顯示沒有標記的接口。 [[ ]] -F 顯示FIB中的路由信息。(這是默認的選項) [[ ]] -C 顯示路由緩沖中的路由信息。 [[ ]] delay netstat將循環輸出統計信息,每隔 delay 秒。 [[ ]]
輸出OUTPUT

活動的Internet網絡連接 (TCP, UDP, raw) [[ ]] Proto 套接字使用的協議。 [[ ]] Recv-Q 連接此套接字的用戶程序未拷貝的字節數。 [[ ]] Send-Q 遠程主機未確認的字節數。 [[ ]] Local Address 套接字的本地地址(本地主機名)和端口號。除非給定-n --numeric ( -n ) 選項,否則套接字地址按標准主機名(FQDN)進行解析,而端口號則轉換到相應的服務名。 [[ ]] Foreign Address 套接字的遠程地址(遠程主機名)和端口號。 Analogous to "Local Address." [[ ]] State 套接字的狀態。因為在RAW協議中沒有狀態,而且UDP也不用狀態信息,所以此行留空。通常它為以下幾個值之一: ESTABLISHED 套接字有一個有效連接。 SYN_SENT 套接字嘗試建立一個連接。 SYN_RECV 從網絡上收到一個連接請求。 FIN_WAIT1 套接字已關閉,連接正在斷開。 FIN_WAIT2 連接已關閉,套接字等待遠程方中止。 TIME_WAIT 在關閉之后,套接字等待處理仍然在網絡中的分組 CLOSED 套接字未用。 CLOSE_WAIT 遠程方已關閉,等待套接字關閉。 LAST_ACK 遠程方中止,套接字已關閉。等待確認。 LISTEN 套接字監聽進來的連接。如果不設置 --listening (-l) 或者 --all (-a) 選項,將不顯示出來這些連接。 CLOSING 套接字都已關閉,而還未把所有數據發出。 UNKNOWN 套接字狀態未知。 [[ ]] User 套接字屬主的名稱或UID。 [[ ]] PID/Program name 以斜線分隔的處理套接字程序的PID及進程名。 --program 使此欄目被顯示。你需要 superuser 權限來查看不是你擁有的套接字的信息。對IPX套接字還無法獲得此信息。 [[ ]] Timer (this needs to be written) [[ ]] 活動的UNIX域套接字 [[ ]] Proto 套接字所用的協議(通常是unix)。 [[ ]] RefCnt 使用數量(也就是通過此套接字連接的進程數)。 [[ ]] Flags 顯示的標志為SO_ACCEPTON(顯示為 ACC ), SO_WAITDATA ( W ) 或 SO_NOSPACE ( N )。 如果相應的進程等待一個連接請求,那么SO_ACCECPTON用於未連接的套接字。其它標志通常並不重要 [[ ]] Type 套接字使用的一些類型: SOCK_DGRAM 此套接字用於數據報(無連接)模式。 SOCK_STREAM 流模式(連接)套接字 SOCK_RAW 此套接字用於RAW模式。 SOCK_RDM 一種服務可靠性傳遞信息。 SOCK_SEQPACKET 連續分組套接字。 SOCK_PACKET RAW接口使用套接字。 UNKNOWN 將來誰知道它的話將告訴我們,就填在這里 :-) [[ ]] State 此字段包含以下關鍵字之一: FREE 套接字未分配。 LISTENING 套接字正在監聽一個連接請求。除非設置 --listening (-l) 或者 --all (-a) 選項,否則不顯示。 CONNECTING 套接字正要建立連接。 CONNECTED 套接字已連接。 DISCONNECTING 套接字已斷開。 (empty) 套接字未連。
實例演示
[root@localhost ~]#netstat -a | more #列出所有端口 (包括監聽和未監聽的) [root@localhost ~]#netstat -at #列出所有TCP端口 [root@localhost ~]#netstat -au #列出所有UDP端口 [root@localhost ~]#netstat -r #顯示核心路由信息 [root@localhost ~]#netstat -i #顯示網絡接口列表 [root@localhost ~]#netstat -tpnl #顯看已連接的TCP端口,以及PID [root@localhost ~]#netstat -nat | grep "192.168.1.15:22" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20 #查看連接某服務端口最多的的IP地址 [root@localhost ~]# netstat -anp |grep 3306 -c #查看3306 端口(mysql)的鏈接數 [root@localhost ~]# netstat -alp|grep 8080 #找出運行在指定端口的進程 [root@localhost ~]# netstat -n | awk '/^tcp/{++S[$NF]} END {for (a in S) print a, S[a]}' #tcp 連接統計
ss
ss 是類似netstat的工具。能顯示查看網絡狀態信息,包括TCP、UDP連接,端口

-a 顯示所有網絡連接 -l 顯示LISTEN狀態的連接(連接打開) -m 顯示內存信息(用於tcp_diag) -o 顯示Tcp 定時器x -p 顯示進程信息 -s 連接統計 -d 只顯示 DCCP信息 (等同於 -A dccp) -u 只顯示udp信息 (等同於 -A udp) -w 只顯示 RAW信息 (等同於 -A raw) -t 只顯示tcp信息 (等同於 -A tcp) -x 只顯示Unix通訊信息 (等同於 -A unix) -4 只顯示 IPV4信息 -6 只顯示 IPV6信息 --help 顯示幫助信息 --version 顯示版本信息
實例演示
[root@localhost ~]# ss -t -a #查看所有的tcp連接 [root@localhost ~]# ss -u -a #查看所有的udp連接 [root@localhost ~]# ss -pl #顯示LISTEN狀態的進程信息 [root@localhost ~]# ss -x src /tmp/.X11-unix/* #顯示連接X服務器的進程
nc
功能說明:功能強大的網絡工具
語 法:nc [-hlnruz][-g<網關...>][-G<指向器數目>][-i<延遲秒數>][-o<輸出文件>][-p<通信端口>][-s<來源位址>][-v...][-w<超時秒數>][主機名稱][通信端口...]

-g<網關> 設置路由器躍程通信網關,最多可設置8個。 -G<指向器數目> 設置來源路由指向器,其數值為4的倍數。 -h 在線幫助。 -i<延遲秒數> 設置時間間隔,以便傳送信息及掃描通信端口。 -l 使用監聽模式,管控傳入的資料。 -n 直接使用IP地址,而不通過域名服務器。 -o<輸出文件> 指定文件名稱,把往來傳輸的數據以16進制字碼傾倒成該文件保存。 -p<通信端口> 設置本地主機使用的通信端口。 -r 亂數指定本地與遠端主機的通信端口。 -s<來源位址> 設置本地主機送出數據包的IP地址。 -u 使用UDP傳輸協議。 -v 顯示指令執行過程。 -w<超時秒數> 設置等待連線的時間。 -z 使用0輸入/輸出模式,只在掃描通信端口時使用。 linux nc (netcat)最新版源碼下載及nc命令詳解
實例演示
端口掃描 [root@localhost ~]# nc -v -w 2 192.168.1.34 -z 21-24 nc: connect to 192.168.2.34 port 21 (tcp) failed: Connection refused Connection to 192.168.2.34 22 port [tcp/ssh] succeeded! nc: connect to 192.168.2.34 port 23 (tcp) failed: Connection refused nc: connect to 192.168.2.34 port 24 (tcp) failed: Connection refused 傳文件 [root@localhost ~]# nc -l 1234 > test.txt #192.168.1.10 [root@localhost ~]# nc 192.168.2.34 < test.txt #192.168.1.11 簡單聊天工具 [root@localhost ~]# nc -l 1234 #192.168.1.10 開啟端口 [root@localhost ~]# nc 192.168.2.34 1234 #192.168.1.11連接端口 建立從本地1234端口到host.example.com的80端口連接,5秒超時 [root@localhost ~]# nc -p 1234 -w 5 suixin.ltd 80 u為UDP連接 [root@localhost ~]# nc -u 192.168.1.102 53 模擬HTTP Headers [root@localhost ~]# nc suixin.ltd 80
tcpdump
tcpdump - 轉儲網絡上的數據流

-A 以ASCII碼方式顯示每一個數據包(不會顯示數據包中鏈路層頭部信息). 在抓取包含網頁數據的數據包時, 可方便查看數據(nt: 即Handy for capturing web pages). -c count tcpdump將在接受到count個數據包后退出. -C file-size (nt: 此選項用於配合-w file 選項使用) 該選項使得tcpdump 在把原始數據包直接保存到文件中之前, 檢查此文件大小是否超過file-size. 如果超過了, 將關閉此文件,另創一個文件繼續用於原始數據包的記錄. 新創建的文件名與-w 選項指定的文件名一致, 但文件名后多了一個數字.該數字會從1開始隨着新創建文件的增多而增加. file-size的單位是百萬字節(nt: 這里指1,000,000個字節,並非1,048,576個字節, 后者是以1024字節為1k, 1024k字節為1M計算所得, 即1M=1024 * 1024 = 1,048,576) -d 以容易閱讀的形式,在標准輸出上打印出編排過的包匹配碼, 隨后tcpdump停止.(nt | rt: human readable, 容易閱讀的,通常是指以ascii碼來打印一些信息. compiled, 編排過的. packet-matching code, 包匹配碼,含義未知, 需補充) -dd 以C語言的形式打印出包匹配碼. -ddd 以十進制數的形式打印出包匹配碼(會在包匹配碼之前有一個附加的'count'前綴). -D 打印系統中所有tcpdump可以在其上進行抓包的網絡接口. 每一個接口會打印出數字編號, 相應的接口名字, 以及可能的一個網絡接口描述. 其中網絡接口名字和數字編號可以用在tcpdump 的-i flag 選項(nt: 把名字或數字代替flag), 來指定要在其上抓包的網絡接口. 此選項在不支持接口列表命令的系統上很有用(nt: 比如, Windows 系統, 或缺乏 ifconfig -a 的UNIX系統); 接口的數字編號在windows 2000 或其后的系統中很有用, 因為這些系統上的接口名字比較復雜, 而不易使用. 如果tcpdump編譯時所依賴的libpcap庫太老,-D 選項不會被支持, 因為其中缺乏 pcap_findalldevs()函數. -e 每行的打印輸出中將包括數據包的數據鏈路層頭部信息 -E spi@ipaddr algo:secret,... 可通過spi@ipaddr algo:secret 來解密IPsec ESP包(nt | rt:IPsec Encapsulating Security Payload,IPsec 封裝安全負載, IPsec可理解為, 一整套對ip數據包的加密協議, ESP 為整個IP 數據包或其中上層協議部分被加密后的數據,前者的工作模式稱為隧道模式; 后者的工作模式稱為傳輸模式 . 工作原理, 另需補充). 需要注意的是, 在終端啟動tcpdump 時, 可以為IPv4 ESP packets 設置密鑰(secret). 可用於加密的算法包括des-cbc, 3des-cbc, blowfish-cbc, rc3-cbc, cast128-cbc, 或者沒有(none).默認的是des-cbc(nt: des, Data Encryption Standard, 數據加密標准, 加密算法未知, 另需補充).secret 為用於ESP 的密鑰, 使用ASCII 字符串方式表達. 如果以 0x 開頭, 該密鑰將以16進制方式讀入. 該選項中ESP 的定義遵循RFC2406, 而不是 RFC1827. 並且, 此選項只是用來調試的, 不推薦以真實密鑰(secret)來使用該選項, 因為這樣不安全: 在命令行中輸入的secret 可以被其他人通過ps 等命令查看到. 除了以上的語法格式(nt: 指spi@ipaddr algo:secret), 還可以在后面添加一個語法輸入文件名字供tcpdump 使用(nt:即把spi@ipaddr algo:secret,... 中...換成一個語法文件名). 此文件在接受到第一個ESP 包時會打開此文件, 所以最好此時把賦予tcpdump 的一些特權取消(nt: 可理解為, 這樣防范之后, 當該文件為惡意編寫時,不至於造成過大損害). -f 顯示外部的IPv4 地址時(nt: foreign IPv4 addresses, 可理解為, 非本機ip地址), 采用數字方式而不是名字.(此選項是用來對付Sun公司的NIS服務器的缺陷(nt: NIS, 網絡信息服務, tcpdump 顯示外部地址的名字時會用到她提供的名稱服務): 此NIS服務器在查詢非本地地址名字時,常常會陷入無盡的查詢循環). 由於對外部(foreign)IPv4地址的測試需要用到本地網絡接口(nt: tcpdump 抓包時用到的接口)及其IPv4 地址和網絡掩碼. 如果此地址或網絡掩碼不可用, 或者此接口根本就沒有設置相應網絡地址和網絡掩碼(nt: linux 下的 'any' 網絡接口就不需要設置地址和掩碼, 不過此'any'接口可以收到系統中所有接口的數據包), 該選項不能正常工作. -F file 使用file 文件作為過濾條件表達式的輸入, 此時命令行上的輸入將被忽略. -i interface 指定tcpdump 需要監聽的接口. 如果沒有指定, tcpdump 會從系統接口列表中搜尋編號最小的已配置好的接口(不包括 loopback 接口).一但找到第一個符合條件的接口, 搜尋馬上結束. 在采用2.2版本或之后版本內核的Linux 操作系統上, 'any' 這個虛擬網絡接口可被用來接收所有網絡接口上的數據包(nt: 這會包括目的是該網絡接口的, 也包括目的不是該網絡接口的). 需要注意的是如果真實網絡接口不能工作在'混雜'模式(promiscuous)下,則無法在'any'這個虛擬的網絡接口上抓取其數據包. 如果 -D 標志被指定, tcpdump會打印系統中的接口編號,而該編號就可用於此處的interface 參數. -l 對標准輸出進行行緩沖(nt: 使標准輸出設備遇到一個換行符就馬上把這行的內容打印出來).在需要同時觀察抓包打印以及保存抓包記錄的時候很有用. 比如, 可通過以下命令組合來達到此目的: ``tcpdump -l | tee dat'' 或者 ``tcpdump -l > dat & tail -f dat''.(nt: 前者使用tee來把tcpdump 的輸出同時放到文件dat和標准輸出中, 而后者通過重定向操作'>', 把tcpdump的輸出放到dat 文件中, 同時通過tail把dat文件中的內容放到標准輸出中) -L 列出指定網絡接口所支持的數據鏈路層的類型后退出.(nt: 指定接口通過-i 來指定) -m module 通過module 指定的file 裝載SMI MIB 模塊(nt: SMI,Structure of Management Information, 管理信息結構MIB, Management Information Base, 管理信息庫. 可理解為, 這兩者用於SNMP(Simple Network Management Protoco)協議數據包的抓取. 具體SNMP 的工作原理未知, 另需補充). 此選項可多次使用, 從而為tcpdump 裝載不同的MIB 模塊. -M secret 如果TCP 數據包(TCP segments)有TCP-MD5選項(在RFC 2385有相關描述), 則為其摘要的驗證指定一個公共的密鑰secret. -n 不對地址(比如, 主機地址, 端口號)進行數字表示到名字表示的轉換. -N 不打印出host 的域名部分. 比如, 如果設置了此選現, tcpdump 將會打印'nic' 而不是 'nic.ddn.mil'. -O 不啟用進行包匹配時所用的優化代碼. 當懷疑某些bug是由優化代碼引起的, 此選項將很有用. -p 一般情況下, 把網絡接口設置為非'混雜'模式. 但必須注意 , 在特殊情況下此網絡接口還是會以'混雜'模式來工作; 從而, '-p' 的設與不設, 不能當做以下選現的代名詞:'ether host {local-hw-add}' 或 'ether broadcast'(nt: 前者表示只匹配以太網地址為host 的包, 后者表示匹配以太網地址為廣播地址的數據包). -q 快速(也許用'安靜'更好?)打印輸出. 即打印很少的協議相關信息, 從而輸出行都比較簡短. -R 設定tcpdump 對 ESP/AH 數據包的解析按照 RFC1825而不是RFC1829(nt: AH, 認證頭, ESP, 安全負載封裝, 這兩者會用在IP包的安全傳輸機制中). 如果此選項被設置, tcpdump 將不會打印出'禁止中繼'域(nt: relay prevention field). 另外,由於ESP/AH規范中沒有規定ESP/AH數據包必須擁有協議版本號域,所以tcpdump不能從收到的ESP/AH數據包中推導出協議版本號. -r file 從文件file 中讀取包數據. 如果file 字段為 '-' 符號, 則tcpdump 會從標准輸入中讀取包數據. -S 打印TCP 數據包的順序號時, 使用絕對的順序號, 而不是相對的順序號.(nt: 相對順序號可理解為, 相對第一個TCP 包順序號的差距,比如, 接受方收到第一個數據包的絕對順序號為232323, 對於后來接收到的第2個,第3個數據包, tcpdump會打印其序列號為1, 2分別表示與第一個數據包的差距為1 和 2. 而如果此時-S 選項被設置, 對於后來接收到的第2個, 第3個數據包會打印出其絕對順序號:232324, 232325). -s snaplen 設置tcpdump的數據包抓取長度為snaplen, 如果不設置默認將會是68字節(而支持網絡接口分接頭(nt: NIT, 上文已有描述,可搜索'網絡接口分接頭'關鍵字找到那里)的SunOS系列操作系統中默認的也是最小值是96).68字節對於IP, ICMP(nt: Internet Control Message Protocol,因特網控制報文協議), TCP 以及 UDP 協議的報文已足夠, 但對於名稱服務(nt: 可理解為dns, nis等服務), NFS服務相關的數據包會產生包截短. 如果產生包截短這種情況, tcpdump的相應打印輸出行中會出現''[|proto]''的標志(proto 實際會顯示為被截短的數據包的相關協議層次). 需要注意的是, 采用長的抓取長度(nt: snaplen比較大), 會增加包的處理時間, 並且會減少tcpdump 可緩存的數據包的數量, 從而會導致數據包的丟失. 所以, 在能抓取我們想要的包的前提下, 抓取長度越小越好.把snaplen 設置為0 意味着讓tcpdump自動選擇合適的長度來抓取數據包. -T type 強制tcpdump按type指定的協議所描述的包結構來分析收到的數據包. 目前已知的type 可取的協議為: aodv (Ad-hoc On-demand Distance Vector protocol, 按需距離向量路由協議, 在Ad hoc(點對點模式)網絡中使用), cnfp (Cisco NetFlow protocol), rpc(Remote Procedure Call), rtp (Real-Time Applications protocol), rtcp (Real-Time Applications con-trol protocol), snmp (Simple Network Management Protocol), tftp (Trivial File Transfer Protocol, 碎文件協議), vat (Visual Audio Tool, 可用於在internet 上進行電 視電話會議的應用層協議), 以及wb (distributed White Board, 可用於網絡會議的應用層協議). -t 在每行輸出中不打印時間戳 -tt 不對每行輸出的時間進行格式處理(nt: 這種格式一眼可能看不出其含義, 如時間戳打印成1261798315) -ttt tcpdump 輸出時, 每兩行打印之間會延遲一個段時間(以毫秒為單位) -tttt 在每行打印的時間戳之前添加日期的打印 -u 打印出未加密的NFS 句柄(nt: handle可理解為NFS 中使用的文件句柄, 這將包括文件夾和文件夾中的文件) -U 使得當tcpdump在使用-w 選項時, 其文件寫入與包的保存同步.(nt: 即, 當每個數據包被保存時, 它將及時被寫入文件中,而不是等文件的輸出緩沖已滿時才真正寫入此文件) -U 標志在老版本的libcap庫(nt: tcpdump 所依賴的報文捕獲庫)上不起作用, 因為其中缺乏pcap_cump_flush()函數. -v 當分析和打印的時候, 產生詳細的輸出. 比如, 包的生存時間, 標識, 總長度以及IP包的一些選項. 這也會打開一些附加的包完整性檢測, 比如對IP或ICMP包頭部的校驗和. -vv 產生比-v更詳細的輸出. 比如, NFS回應包中的附加域將會被打印, SMB數據包也會被完全解碼. -vvv 產生比-vv更詳細的輸出. 比如, telent 時所使用的SB, SE 選項將會被打印, 如果telnet同時使用的是圖形界面, 其相應的圖形選項將會以16進制的方式打印出來(nt: telnet 的SB,SE選項含義未知, 另需補充). -w 把包數據直接寫入文件而不進行分析和打印輸出. 這些包數據可在隨后通過-r 選項來重新讀入並進行分析和打印. -W filecount 此選項與-C 選項配合使用, 這將限制可打開的文件數目, 並且當文件數據超過這里設置的限制時, 依次循環替代之前的文件, 這相當於一個擁有filecount 個文件的文件緩沖池. 同時, 該選項會使得每個文件名的開頭會出現足夠多並用來占位的0, 這可以方便這些文件被正確的排序. -x 當分析和打印時, tcpdump 會打印每個包的頭部數據, 同時會以16進制打印出每個包的數據(但不包括連接層的頭部).總共打印的數據大小不會超過整個數據包的大小與snaplen 中的最小值. 必須要注意的是, 如果高層協議數據沒有snaplen 這么長,並且數據鏈路層(比如, Ethernet層)有填充數據, 則這些填充數據也會被打印.(nt: so for link layers that pad, 未能銜接理解和翻譯, 需補充 ) -xx tcpdump 會打印每個包的頭部數據, 同時會以16進制打印出每個包的數據, 其中包括數據鏈路層的頭部. -X 當分析和打印時, tcpdump 會打印每個包的頭部數據, 同時會以16進制和ASCII碼形式打印出每個包的數據(但不包括連接層的頭部).這對於分析一些新協議的數據包很方便. -XX 當分析和打印時, tcpdump 會打印每個包的頭部數據, 同時會以16進制和ASCII碼形式打印出每個包的數據, 其中包括數據鏈路層的頭部.這對於分析一些新協議的數據包很方便. -y datalinktype 設置tcpdump 只捕獲數據鏈路層協議類型是datalinktype的數據包 -Z user 使tcpdump 放棄自己的超級權限(如果以root用戶啟動tcpdump, tcpdump將會有超級用戶權限), 並把當前tcpdump的用戶ID設置為user, 組ID設置為user首要所屬組的ID(nt: tcpdump 此處可理解為tcpdump 運行之后對應的進程) 此選項也可在編譯的時候被設置為默認打開.(nt: 此時user 的取值未知, 需補充)
實例演示
[root@www ~]# tcpdump -i eth1 #監視指定網絡接口的數據包 [root@www ~]# tcpdump host webserver #打印所有進入或離開webserver的數據包. [root@www ~]# tcpdump host 210.27.48.1 #也可以指定ip,例如截獲所有210.27.48.1 的主機收到的和發出的所有的數據包 [root@www ~]# tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \) #截獲主機210.27.48.1 和主機210.27.48.2 或210.27.48.3的通信 [root@www ~]# tcpdump ip host 210.27.48.1 and ! 210.27.48.2 #獲取主機210.27.48.1除了和主機210.27.48.2之外所有主機通信的ip包 [root@www ~]# tcpdump -i eth0 src host webserver #截獲主機webserver發送的所有數據 [root@www ~]# tcpdump -i eth0 dst host webserver #監視所有送到主機webserver的數據包 [root@www ~]# tcpdump tcp port 23 and host 210.27.48.1 #獲取主機210.27.48.1接收或發出的telnet包 [root@www ~]# tcpdump udp port 123 #對本機的udp 123 端口進行監視 123 為ntp的服務端口 [root@www ~]# tcpdump net ucb-ether #打印本地主機與Berkeley網絡上的主機之間的所有通信數據包(nt: ucb-ether, 此處可理解為'Berkeley網絡'的網絡地址,此表達式最原始的含義可表達為: 打印網絡地址為ucb-ether的所有數據包) [root@www ~]# tcpdump 'gateway snup and (port ftp or ftp-data)' #打印所有通過網關snup的ftp數據包(注意, 表達式被單引號括起來了, 這可以防止shell對其中的括號進行錯誤解析) [root@www ~]# tcpdump ip and not net localnet #打印所有源地址或目標地址是本地主機的IP數據包 [root@www ~]# tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net localnet' #打印TCP會話中的的開始和結束數據包, 並且數據包的源或目的不是本地網絡上的主機.(nt: localnet, 實際使用時要真正替換成本地網絡的名字)) [root@www ~]# tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2 -="" tcp="" 12="" 0xf0="">>2)) != 0)' #打印所有源或目的端口是80, 網絡層協議為IPv4, 並且含有數據,而不是SYN,FIN以及ACK-only等不含數據的數據包 [root@www ~]# tcpdump 'gateway snup and ip[2:2] > 576' #打印長度超過576字節, 並且網關地址是snup的IP數據包 [root@www ~]# tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224' #打印所有IP層廣播或多播的數據包, 但不是物理以太網層的廣播或多播數據報 [root@www ~]# tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply' #打印除'echo request'或者'echo reply'類型以外的ICMP數據包 [root@www ~]# tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap #(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp這些選項等都要放到第一個參數的位置,用來過濾數據報的類型 #(2)-i eth1 : 只抓經過接口eth1的包 #(3)-t : 不顯示時間戳 #(4)-s 0 : 抓取數據包時默認抓取長度為68字節。加上-S 0 后可以抓到完整的數據包 #(5)-c 100 : 只抓取100個數據包 #(6)dst port ! 22 : 不抓取目標端口是22的數據包 #(7)src net 192.168.1.0/24 : 數據包的源網絡地址為192.168.1.0/24 #(8)-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析 [root@www ~]# tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854 #使用tcpdump抓取HTTP包
nslookup
nslookup 命令:用於查找域名服務器的程序,nslookup有兩種模式:交互和非交互
非交互式
[root@localhost~]# nslookup baidu.com Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: Name: baidu.com Address: 123.125.114.144 Name: baidu.com Address: 220.181.111.85 Name: baidu.com Address: 220.181.111.86
交互式
[root@localhost ~]# nslookup > www.baidu.com Server: 172.17.0.254 Address: 172.17.0.254#53 Non-authoritative answer: #非權威答案,表明是在緩存中讀取的 www.baidu.com canonical name = www.a.shifen.com. Name: www.a.shifen.com Address: 61.135.169.105 #返回第一個IP地址 Name: www.a.shifen.com Address: 61.135.169.125 #返回第二個IP地址 > server 8.8.8.8 #設置域名服務器為 8.8.8.8 Default server: 8.8.8.8 Address: 8.8.8.8#53 > www.baidu.com #再次請求百度的IP地址 Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: www.baidu.com canonical name = www.a.shifen.com. Name: www.a.shifen.com Address: 220.181.111.147 #不同的DNS獲取的IP地址是不同的。
dig
dig DNS 查詢實用程式。
語法
dig [@server] [-b address] [-c class] [-f filename] [-k filename] [ -n ][-p port#] [-t type] [-x addr] [-y name:key] [name] [type] [class] [queryopt...]
dig [-h]
dig [global-queryopt...] [query...]
描述
dig(域信息搜索器)命令是個用於詢問 DNS 域名服務器的靈活的工具。他執行 DNS 搜索,顯示從受請求的域名服務器返回的答復。多數 DNS 管理員利用 dig 作為 DNS 問題的故障診斷,因為他靈活性好、易用、輸出清楚。
雖然通常情況下 dig 使用命令行參數,但他也能夠按批處理模式從文檔讀取搜索請求。不同於早期版本,dig 的 BIND9 實現允許從命令行發出多個查詢。除非被告知請求特定域名服務器,dig 將嘗試 /etc/resolv.conf 中列舉的任何服務器。
當未指定任何命令行參數或選項時,dig 將對“.”(根)執行 NS 查詢。

標志 -b address 配置所要詢問地址的源 IP 地址。這必須是主機網絡接口上的某一合法的地址。 -c class 缺省查詢類(IN for internet)由選項 -c 重設。class 能夠是任何合法類,比如查詢 Hesiod 記錄的 HS 類或查詢 CHAOSNET 記錄的 CH 類。 -f filename 使 dig 在批處理模式下運行,通過從文檔 filename 讀取一系列搜索請求加以處理。文檔包含許多查詢;每行一個。文檔中的每一項都應該以和使用命令行接口對 dig 的查詢相同的方法來組織。 -h 當使用選項 -h 時,顯示一個簡短的命令行參數和選項摘要。 -k filename 要簽署由 dig 發送的 DNS 查詢連同對他們使用事務簽名(TSIG)的響應,用選項 -k 指定 TSIG 密鑰文檔。 -n 缺省情況下,使用 IP6.ARPA 域和 RFC2874 定義的二進制標號搜索 IPv6 地址。為了使用更早的、使用 IP6.INT 域和 nibble 標簽的 RFC1886 方法,指定選項 -n(nibble)。 -p port# 假如需要查詢一個非標准的端口號,則使用選項 -p。port# 是 dig 將發送其查詢的端口號,而不是標准的 DNS 端口號 53。該選項可用於測試已在非標准端口號上配置成偵聽查詢的域名服務器。 -t type 配置查詢類型為 type。能夠是 BIND9 支持的任意有效查詢類型。缺省查詢類型是 A,除非提供 -x 選項來指示一個逆向查詢。通過指定 AXFR 的 type 能夠請求一個區域傳輸。當需要增量區域傳輸(IXFR)時,type 配置為 ixfr=N。增量區域傳輸將包含自從區域的 SOA 記錄中的序列號改為 N 之后對區域所做的更改。 -x addr 逆向查詢(將地址映射到名稱)能夠通過 -x 選項加以簡化。addr 是個以小數點為界的 IPv4 地址或冒號為界的 IPv6 地址。當使用這個選項時,無需提供 name、class 和 type 參數。dig 自動運行類似 11.12.13.10.in-addr.arpa 的域名查詢,並分別配置查詢類型和類為 PTR 和 IN。 -y name:key 您能夠通過命令行上的 -y 選項指定 TSIG 密鑰;name 是 TSIG 密碼的名稱,key 是實際的密碼。密碼是 64 位加密字符串,通常由 dnssec-keygen(8)生成。當在多用戶系統上使用選項 -y 時應該謹慎,因為密碼在 ps(1)的輸出或 shell 的歷史文檔中可能是可見的。當同時使用 dig 和 TSCG 認證時,被查詢的名稱服務器需要知道密碼和解碼規則。在 BIND 中,通過提供正確的密碼和 named.conf 中的服務器聲明實現。 參數 global-queryopt... 全局查詢選項(請參閱多個查詢)。 查詢 查詢選項(請參閱查詢選項)。 查詢選項 dig 提供查詢選項號,他影響搜索方式和結果顯示。一些在查詢請求報頭配置或復位標志位,一部分決定顯示哪些回復信息,其他的確定超時和重試戰略。每個查詢選項 被帶前綴(+)的關鍵字標識。一些關鍵字配置或復位一個選項。通常前綴是求反關鍵字含義的字符串 no。其他關鍵字分配各選項的值,比如超時時間間隔。他們的格式形如 +keyword=value。查詢選項是: +[no]tcp 查詢域名服務器時使用 [不使用] TCP。缺省行為是使用 UDP,除非是 AXFR 或 IXFR 請求,才使用 TCP 連接。 +[no]vc 查詢名稱服務器時使用 [不使用] TCP。+[no]tcp 的備用語法提供了向下兼容。 vc 代表虛電路。 +[no]ignore 忽略 UDP 響應的中斷,而不是用 TCP 重試。缺省情況運行 TCP 重試。 +domain=somename 設定包含單個域 somename 的搜索列表,似乎被 /etc/resolv.conf 中的域偽指令指定,並且啟用搜索列表處理,似乎給定了 +search 選項。 +[no]search 使用 [不使用] 搜索列表或 resolv.conf 中的域偽指令(假如有的話)定義的搜索列表。缺省情況不使用搜索列表。 +[no]defname 不建議看作 +[no]search 的同義詞。 +[no]aaonly 該選項不做任何事。他用來提供對配置成未實現解析器標志的 dig 的舊版本的兼容性。 +[no]adflag 在查詢中配置 [不配置] AD(真實數據)位。現在 AD 位只在響應中有標准含義,而查詢中沒有,但是出於完整性考慮在查詢中這種性能能夠配置。 +[no]cdflag 在查詢中配置 [不配置] CD(檢查禁用)位。他請求服務器不運行響應信息的 DNSSEC 合法性。 +[no]recursive 轉換查詢中的 RD(需要遞歸)位配置。在缺省情況下配置該位,也就是說 dig 正常情形下發送遞歸查詢。當使用查詢選項 +nssearch 或 +trace 時,遞歸自動禁用。 +[no]nssearch 這個選項被配置時,dig 試圖尋找包含待搜名稱的網段的權威域名服務器,並顯示網段中每台域名服務器的 SOA 記錄。 +[no]trace 轉換為待查詢名稱從根名稱服務器開始的代理路徑跟蹤。缺省情況不使用跟蹤。一旦啟用跟蹤,dig 使用迭代查詢解析待查詢名稱。他將按照從根服務器的參照,顯示來自每台使用解析查詢的服務器的應答。 +[no]cmd 設定在輸出中顯示指出 dig 版本及其所用的查詢選項的初始注釋。缺省情況下顯示注釋。 +[no]short 提供簡要答復。缺省值是以冗長格式顯示答復信息。 +[no]identify 當啟用 +short 選項時,顯示 [或不顯示] 提供給答的 IP 地址和端口號。假如請求簡短格式應答,缺省情況不顯示提供給答的服務器的源地址和端口號。 +[no]comments 轉換輸出中的注釋行顯示。缺省值是顯示注釋。 +[no]stats 該查詢選項設定顯示統計信息:查詢進行時,應答的大小等等。缺省顯示查詢統計信息。 +[no]qr 顯示 [不顯示] 發送的查詢請求。缺省不顯示。 +[no]question 當返回應答時,顯示 [不顯示] 查詢請求的問題部分。缺省作為注釋顯示問題部分。 +[no]answer 顯示 [不顯示] 應答的回答部分。缺省顯示。 +[no]authority 顯示 [不顯示] 應答的權限部分。缺省顯示。 +[no]additional 顯示 [不顯示] 應答的附加部分。缺省顯示。 +[no]all 配置或清除任何顯示標志。 +time=T 為查詢配置超時時間為 T 秒。缺省是5秒。假如將 T 配置為小於1的數,則以1秒作為查詢超時時間。 +tries=A 配置向服務器發送 UDP 查詢請求的重試次數為 A,代替缺省的 3 次。假如把 A 小於或等於 0,則采用 1 為重試次數。 +ndots=D 出於完全考慮,配置必須出現在名稱 D 的點數。缺省值是使用在 /etc/resolv.conf 中的 ndots 語句定義的,或是 1,假如沒有 ndots 語句的話。帶更少點數的名稱被解釋為相對名稱,並通過搜索列表中的域或文檔 /etc/resolv.conf 中的域偽指令進行搜索。 +bufsize=B 配置使用 EDNS0 的 UDP 消息緩沖區大小為 B 字節。緩沖區的最大值和最小值分別為 65535 和 0。超出這個范圍的值自動舍入到最近的有效值。 +[no]multiline 以周詳的多行格式顯示類似 SOA 的記錄,並附帶可讀注釋。缺省值是每單個行上顯示一條記錄,以便於電腦解析 dig 的輸出。 多條查詢 dig 的 BIND9 支持在命令行上指定多個查詢(支持 -f 批處理文檔選項的附加功能)。每條查詢能夠使用自己的標志位、選項和查詢選項。 在這種情況下,在上面描述的命令行語法中,每條查詢自變量代表一個個別查詢。每一條由任意標准選項和標志、待查詢名稱、可選查詢類型和類連同任何適用於該查詢的查詢選項。 也能夠使用對任何查詢均有效的查詢選項全局集合。全局查詢選項必須位於命令行上第一個名稱、類、類型、選項、標志和查詢選項的元組之前。任何全局查詢選項(除了 +[no]cmd 選項)能夠被下面的查詢特別選項重設。例如: dig +qr www.isc.org any -x 127.0.0.1 isc.org ns +noqr顯示 dig 如何從命令行出發進行三個查詢:一個針對 www.isc.org的任意查詢、一個 127.0.0.1 的逆向查詢,連同一個 isc.org 的 NS 記錄查詢。應用了 +qr 的全局查詢選項,以便 dig 顯示進行每條查詢的初始查詢。最后那個查詢有一個本地查詢選項 +noqr,表示 dig 在搜索 isc.org 的 NS 記錄時不顯示初始查詢。
實例演示
a,最簡單的方法 [root@localhost ~]# dig baidu.com b,查找yahoo.com的A記錄 [root@localhost ~]# dig yahoo.com A +noall +answer c,查找yahoo.com MX記錄的列表 [root@localhost ~]# dig yahoo.com MX +noall +answer ------------------------------------------------ d,查找yahoo.com的權威DNS [root@localhost ~]# dig yahoo.com NS +noall +answer e,查詢上面所有的記錄 [root@localhost ~]# dig yahoo.com ANY +noall +answer f,在現在這種IPv4和IPV6混用的情況下,你也可以使用AAAA的選項查詢主機的IPv6 AAAA記錄 [root@localhost ~]# dig www.baidu.com AAAA +short ------------------------------------------------ g,快速回答時,+short [root@localhost ~]# dig www.baidu.com +short h,+multiline選項獲得冗長的多行模式人性化注釋的DSN的SOA記錄,一般來說,用+multiline選項獲得的信息可以顯示很多,就像BIND配置文件一樣。 [root@localhost ~]# dig +nocmd baidu.com any +multiline +noall +answer ;; Truncated, retrying in TCP mode. baidu.com. 7200 IN SOA dns.baidu.com. sa.baidu.com. ( 2012111640 ; serial 300 ; refresh (5 minutes) 300 ; retry (5 minutes) 2592000 ; expire (4 weeks 2 days) 7200 ; minimum (2 hours) ) baidu.com. 7200 IN TXT "v=spf1 ip4:220.181.50.0/24 ip4:220.181.18.241 ip4:61.208.132.13 ip4:220.181.27.29 ip4:202.108.22.171 ip4:220.181.5.0/24 ip4:123.125.66.0/24 ip4:61.135.168.0/24 ip4:115.239.212.0/24 ip4:58.217.202.0/24 ip4:61.135.162.0/23 ip4:63.217.157.86 a mx ptr ~all" baidu.com. 7200 IN MX 20 mx50.baidu.com. baidu.com. 7200 IN MX 10 mx.mailcdn.baidu.com. baidu.com. 7200 IN MX 20 mx1.baidu.com. baidu.com. 7200 IN MX 20 jpmx.baidu.com. baidu.com. 600 IN A 220.181.111.86 baidu.com. 600 IN A 123.125.114.144 baidu.com. 600 IN A 220.181.111.85 baidu.com. 21600 IN NS ns2.baidu.com. baidu.com. 21600 IN NS ns4.baidu.com. baidu.com. 21600 IN NS ns3.baidu.com. baidu.com. 21600 IN NS dns.baidu.com. i,使用-x 查詢反向解析 [root@localhost ~]# dig -x 220.181.111.86 ------------------------------------------------ j,查詢一個不同的命名服務器 [root@localhost ~]# dig @ns1.google.com www.google.com k,跟蹤dig的查詢路徑 [root@localhost ~]# dig baidu.com +trace l,獲取SOA記錄 [root@localhost ~]# dig baidu.com +nssearch ------------------------------------------------ m,解釋TTL數值 [root@localhost ~]# dig +nocmd gmail.com MX +noall +answer n,使用@指定服務器 使用-p指定非標准端口 使用-t來指定查詢類型 [root@localhost ~]# dig sohu.com @202.102.134.68 -p 53 -t MX
點此查看更多命令合集
翻譯 朗讀 復制 正在查詢,請稍候…… 重試 朗讀 復制 復制 朗讀 復制 via 谷歌翻譯(國內) 譯