作為一名 IT 從業(yè)者,經常都要跟 Linux 打交道,其中網絡更是用得頻繁,掌握基本的網絡命令是必備的技能,更是提高我們工作效率的必備良器,今天這篇文章就來梳理下常用的網絡工具。因為梳理的命令比較多,所以文章自然不會深入介紹這些命令的用法,大家可以有個印象,然后學習工作中碰到了再具體去查好了。
總的來說,Linux 網絡命令涉及到這么幾塊:
最重要的兩個工具就是 ifconfig 和 ip,這兩個工具分別來自兩個工具包 net-tools 和 iproute2,其中, net-tools 包還包含如 route、 netstat、 tc、 ifstat 等等常用的工具,不過, net-tools 包已經逐步在被 iproute2 包替換。對于我們學習來說,不妨都學習下,這樣也有助于理解和記憶。
1.1 ifconfig
ifconfig 通常是用來查看網卡的信息(比如 IP 地址、收發(fā)包及丟包情況等),以及配置網卡(如啟停網卡,修改網卡 MTU,修改 IP、MAC 地址等)
查看網卡信息:
給網卡配置 IP 地址:
開關網卡:
1.2 ip
ip 是非常強大的工具,可以替換 net-tools 包的所有工具,如常見的 ifconfig、 netstat、 route、 arp 等,比如查看網卡信息:
查看路由:
查看 arp 信息:
更多的用法大家用到可以 man ip 一下。
連通性探測意在使用工具探測兩個網絡節(jié)點之間的連通性,常用的有 ping、 telnet、 traceroute、 tracepath、 mtr 等工具。
2.1 ping
這個命令通常用來判斷網絡的連通性和網速情況,偶爾用來查看域名的 IP,比如:
可以看到百度對應域名的 IP。
使用 -c 參數(shù)可以指定發(fā)送數(shù)據(jù)包的個數(shù), -w 指定最長等待時間, -I指定發(fā)送數(shù)據(jù)包的網卡。
ping 只能使用 ipv4,要使用 ipv6,可以用 ping6 命令。
2.2 telnet
telnet 通常用作遠程登錄,用來確定遠程服務的狀態(tài),探測遠程服務器的某個端口是否能訪問,也可以探測本地的,如:
可見成功連接到 localhost 的 22 端口,說明該端口已經打開。
2.3 traceroute & tracepath
traceroute 主要用來探測從源主機到目標主機之間的每一跳路由節(jié)點,通常和 ping 結合起來排查網絡故障, ping 測連通性和網速,如果網絡不通,可以借由 traceroute 進一步排查是哪個路由節(jié)點出問題了。如果網絡卡頓,也可以判斷出哪里是瓶頸。
可以看到,從主機到 baidu.com 共經歷了 30 跳,每一跳都統(tǒng)計了響應時間。
類似的工具還有一個 tracepath。
2.4 mtr
mtr 全稱是 mytraceroute,是一個集大成的工具,它集成了 ping、 traceroute、 nslookup 的功能,診斷網絡問題非常方便。
mtr 有個好處就是能夠 實時刷新 數(shù)據(jù),比如 mtr-n www.baidu.com 可以看到,從本地到百度經過的所有路由,并顯示每個路由間的丟包率、響應時間等。
常用參數(shù):
mtr -r 不會刷新,一次性打印 10個包的統(tǒng)計結果mtr -s 用來指定ping數(shù)據(jù)包的大小mtr -n no-dns不對IP地址做域名反解析mtr -a 來設置發(fā)送數(shù)據(jù)包的IP地址,這個用于主機有多個IP時。mtr -i 使用這個參數(shù)來設置ICMP返回之間的要求默認是1秒mtr -c 指定發(fā)送多少個數(shù)據(jù)包mtr -4 IPv4mtr -6 IPv6
主要涉及到對網絡連接狀態(tài)的統(tǒng)計,比如連接打開了哪些端口、TCP/UDP、socket 的狀態(tài)是什么等等。常用的工具有 netstat、 ss、lsof、 netcat等。
3.1 netstat
netstat 用于查看當前網絡的連接情況,能夠查看所有的網絡連接,包括 unix socket 等,也是集多種工具于一身的組合工具。最常用的就是用來檢查本地系統(tǒng)都打開了哪些端口:
其他的一些常見用法還有:
3.2 ss
ss 和 netstat 類似,也是用來查看網絡連接統(tǒng)計的工具,它的輸出也和 netstat 類似,甚至顯示更多連接狀態(tài)信息,它最大的優(yōu)勢在于比 netstat 快,在服務器維持上萬個連接的情況下,這種優(yōu)勢就體現(xiàn)得比較明顯。
常用參數(shù):
通常使用 ss-tln4 查看本地監(jiān)聽的所有端口。
3.3 lsof
lsof 可以列出當前系統(tǒng)打開文件、打開文件的進程、進程打開的端口。由于在 Linux 中一切皆文件,所以, lsof 也常用來統(tǒng)計網絡相關的文件信息(使用 -i 選項),如 TCP/UDP/Unix socket 的統(tǒng)計信息。
它的使用格式為 [46][protocol][@hostname|hostaddr][:service|port],比如:
列出所有與主機 172.18.82.173(我的主機IP)22 號端口的 ipv4 連接:
3.4 netcat(nc)
nc 被稱為瑞士軍刀,非常輕巧但功能強大,能夠創(chuàng)建各種不同類型的網絡連接、能夠實現(xiàn)簡單的聊天工具、遠程傳輸文件、debug 分析、掃描端口等。
比如掃描主機 172.18.82.173 的 1-100 哪些端口開放:
可以看到,該主機開放了 22 和 80 端口。
4.1 ifstat
ifstat 主要用來監(jiān)測主機網口的網絡流量,常用的選項包括:
比如,通過以下命令統(tǒng)計主機所有網口某一段時間內的流量數(shù)據(jù):
4.2 sar
sar 是一個系統(tǒng)歷史數(shù)據(jù)統(tǒng)計工具。統(tǒng)計的信息非常全,包括 CPU、內存、磁盤 I/O、網絡、進程、系統(tǒng)調用等等信息。網絡信息通常使用 -n參數(shù)來統(tǒng)計,常用幾個選項如下:
4.3 iftop
和 top、 iotop 是一個系列,它主要用來查看網絡流量。
5.1 arp
用來管理主機的 ARP 緩存,增刪查改等。
常見用法:
5.2 arping
查看本 LAN 內 IP 對應的主機 MAC 地址,以及 MAC 的占用問題。
比如,指定從某個接口向某臺主機發(fā)送 ARP 包,來獲得 MAC 地址。
5.3 vconfig
Linux vlan 配置命令,比如給某個接口增加兩個 vlan 是:
刪除 vlan 是:
vconfig rem eth0.100vconfig rem eth0.200
5.4 route
route 用來查看和修改路由表,同樣工具還有 netstat-r 和 ip route。
比如添加一條默認路由:
6.1 iptables
iptables 是強大的包過濾工具。 iptables 通過一系列規(guī)則來過濾、處理數(shù)據(jù)包,能夠實現(xiàn)防火墻、NAT等功能。
當一個網絡包進入到主機之前,會經過一系列的 iptables 規(guī)則檢查,如何通過則接受,否則就丟棄,iptables 的規(guī)則由多個表組成,每個表又由多條鏈構成,整體比較復雜,對于這個工具,我們 后面再出一篇文章來進行詳細講解。
6.2 ipset
ipset 是一個輔助 iptables 的工具,通常用在限制多個 IP 的場景下,使用 ipset,可以將多個 IP 放入一個集合,然后 iptables 針對這個集合做限制,這樣可以大大提高效率。 ipset除了可以集合 IP 外,還可以集合 網段、MAC、端口、網卡等。
常用操作比如:
創(chuàng)建一個 ipset:
ipset create blacklist hash:ip
往集合中增加項:
從集合中移除項:
ipset del blacklist 192.168.10.2
還可以指定超時時間限制:
7.1 host
host 命令是域名分析查詢工具,用來測試域名系統(tǒng)工作是否正常。
比如查看百度域名信息:
[root@by ~] host www.baidu.comwww.baidu.com is an alias for www.a.shifen.com.www.a.shifen.com has address 14.215.177.38www.a.shifen.com has address 14.215.177.39
7.2 nslookup
nslookup 用于交互式域名解析,查看域名解析是否正常,在網絡故障的時候用來診斷網絡問題。
查看 google.com 的 DNS 地址:
查看使用的 DNS 服務器地址:
7.3 dig
dig 命令也是域名解析工具,但是比 nslookup 提供的更全面:
7.4 whois
whois 用于查看域名所有者的信息,比如注冊郵箱、手機號碼、域名服務商等。
比如,查看 coolshell.cn 這個域名是陳皓在萬網注冊的,注冊時間是 2009 年,注冊郵箱是 haoel@hotmail.com。
8.1 tcpdump
tcpdump 是 Linux 下最為強大的抓包工具。之前寫過一篇完整的文章,詳細請看這里:
Linux 網絡命令必知必會之 tcpdump,一份完整的抓包指南請查收!
虛擬設備指的是針對 tap/tun、veth-pair、bridge、ovs 等設備的工具。
對于這些設備的操作命令,都隸屬于 ip 命令,比如 tap/tun 設備是 ip tuntap、veth-pair 和 bridge 是 ip link和 ip netns。
除此之外,還有一些相關的輔助工具。
9.1 tunctl
tunctl 實現(xiàn)和 ip tuntap 類似,用來創(chuàng)建 tap/tun 設備。
默認創(chuàng)建 tap 接口:
tunctl
以上等價于 tunctl-p
為用戶 user 創(chuàng)建一個 tap 接口:
創(chuàng)建 tun 接口:
tunctl -n
刪除接口:
9.2 brctl
brctl 用來操作 bridge 網橋,可用于查看網橋、創(chuàng)建網橋、把網卡加入網橋等。
[root@by ~]# brctl showbridge name bridge id STP enabled interfacesbr0 8000.000000000000 no
OVS 是網橋的第三方開源實現(xiàn),它自帶一套命令集,有興趣的讀者可以進一步研究下。
以上便是平時常用的網絡工具集合,除此之外,其實還有很多,推薦大家重點掌握以上這些,如有不懂的地方,man 一下就清楚了。
除了命令之外,跟網絡相關的還有一些重要文件,比如:
NDK基礎開發(fā)流程—Linux流程