Linux作爲一款強大的操作系統,憑藉其優異的的網絡服務功能,被廣泛使用到雲服務中心、數據中心、嵌入式邊緣物聯代理等需要可靠的網絡服務支持的場景中。具體到生成環境,免不了使用工具去管理和控制網絡,本文就來帶領大家細數一下,Linux下都有哪些提供網絡管理的工具。
ifconfig
相信大家最爲熟悉的就是ifconfig,作爲網絡接口的配置工具,經常用用來查看、配置網口的基本信息。
-
查看所有網口信息
ifconfig -a eth0 Link encap:Ethernet HWaddr 7E:8E:87:AD:39:EC inet addr:192.168.1.103 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:7388 errors:0 dropped:0 overruns:0 frame:0 TX packets:1895 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2617515 (2.4 MiB) TX bytes:377852 (368.9 KiB) loLink encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:50 errors:0 dropped:0 overruns:0 frame:0 TX packets:50 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:2401 (2.3 KiB) TX bytes:2401 (2.3 KiB)
-
up/down網口
ifconfig eth0 up/down
-
配置網口基本信息
ifconfig eth0 192.168.1.101/24 up
ip
大家對於ip的熟悉程度可能低於ifconfig,但是,如果作爲一名專業的Linux網絡維護者而言,可以不會使用ifconfig,但是必須會使用ip。因爲,ip的功能更爲全面和強大,其不僅可以配置普通網口設備,還可以配置路由信息,策略路由、隧道等更爲強大的功能。並且有的機器上默認是不安裝ifconfig的,但ip肯定是會安裝的。所以,爲了能夠正常的配置和使用網絡,ip這個命令還是需要掌握的。
-
幫助信息
ip -h
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help } ip [ -force ] -batch filename where OBJECT := { link | address | addrlabel | route | rule | neighbor | ntable | tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm | netns | l2tp | fou | tcp_metrics | token | netconf } OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] | -h[uman-readable] | -iec | -f[amily] { inet | inet6 | ipx | dnet | mpls | bridge | link } | -4 | -6 | -I | -D | -B | -0 | -l[oops] { maximum-addr-flush-attempts } | -br[ief] | -o[neline] | -t[imestamp] | -ts[hort] | -b[atch] [filename] | -rc[vbuf] [size] | -n[etns] name | -a[ll] | -c[olor]}
一條ip命令的基本格式爲:ip [ OPTIONS ] OBJECT { COMMAND | help },COMMAND與具體的OBJECT有關,基本的包括:add、delete、list、help。
具體到每個OBJECT,可以通過ip OBJECT help查看更爲具體的幫助信息,比如,查看ip addr help
ip addr help
Usage: ip addr {add|change|replace} IFADDR dev STRING [ LIFETIME ]
[ CONFFLAG-LIST ]
ip addr del IFADDR dev STRING
ip addr {show|flush} [ dev STRING ] [ scope SCOPE-ID ]
[ to PREFIX ] [ FLAG-LIST ] [ label PATTERN ]
IFADDR := PREFIX | ADDR peer PREFIX
[ broadcast ADDR ] [ anycast ADDR ]
[ label STRING ] [ scope SCOPE-ID ]
SCOPE-ID := [ host | link | global | NUMBER ]
FLAG-LIST := [ FLAG-LIST ] FLAG
FLAG := [ permanent | dynamic | secondary | primary |
tentative | deprecated | dadfailed | temporary |
CONFFLAG-LIST ]
CONFFLAG-LIST := [ CONFFLAG-LIST ] CONFFLAG
CONFFLAG := [ home | nodad ]
LIFETIME := [ valid_lft LFT ] [ preferred_lft LFT ]
LFT := forever | SECONDS
-
地址配置
ip addr help #查看ip addr命令使用幫助信息 ip addr add 192.168.1.100/24 dev eth0 #配置eth的IP ip addr del 192.168.1.100/24 dev eth0 #刪除eth的IP ip addr show
-
鏈路配置
ip link help #查看ip link使用幫助信息
ip link set eth0 up/down
ip link show -
路由配置
ip route help ip route add 192.168.1.0 dev eth0 # 目的網路地址爲192.168.1.0的出口設備爲eth0 ip route add default via 192.168.1.100 # 默認路由的出口IP爲192.168.1.100 ip route show
netstat
netstat用於打印有關網絡連接信息、路由信息、網絡統計信息等,是調試TCP連接問題,統計網絡信息的利器。下面是netstat的基本用法,足夠日常調試使用。
-
基本功能
Display networking information
-r Routing table #顯示路由信息 -a All sockets #顯示所有socket信息 -l Listening sockets #顯示處於Listenting狀態的socket Else: connected sockets -t TCP sockets #顯示TCP socket -u UDP sockets #顯示UDP socket -w Raw sockets #顯示Raw socket -x Unix sockets #顯示Unix socket Else: all socket types -e Other/more information -n Don't resolve names #顯示IP地址信息,而不是hostname -W Wide display -p Show PID/program name for sockets# 顯示socket相關的進程ID信息
-
顯示當前系統所有TCP scoket相關信息
netstat -natlp Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:513 0.0.0.0:* LISTEN 761/inetd tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 761/inetd
-
顯示當前系統所有UDP socket相關信息
netstat -naulp Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name udp 0 0 0.0.0.0:518 0.0.0.0:* 761/inetd
tcpdump
對於網絡程序開發者來說,一定會涉及到網絡協議的處理,那有時爲了分析網絡數據包的就免不了使用抓包工具,進行網絡數據包的抓取和分析。tcpdump就是完成該項功能的神器。tcpdump的功能十分的強大,命令參數也是十分的複雜。但是,根據二八原則,大部分的命令參數是不會經常使用的,下面介紹的也是tcpdump使用比較高頻的命令參數。
-
抓取特定網卡的數據包
tcpdump -i eth0
-
過濾源或者目的ip
tcpdump -i eth0 src 192.168.1.1 and dst 192.168.2.100
-
過濾指定協議和端口號的數據包
tcpdump -i eth0 -p tcp port 80 tcpdump -i eth0 -p udp port 9900
-
顯示數據包的詳細信息
tcpdump -i eth0 -p tcp port 80 -XX -n -XX:分析、打印協議的頭部信息,打印數據信息,打印方式爲十六進制和ACSII碼 -n:顯示IP地址信息
-
保存抓取大數據包
tcpump -i eth0 -w file-w:可以將抓取到的數據保存到文件中。
ifplugd
嵌入式Linux環境下, 網絡設備的狀態經常發生變化,比如,RJ45接口網線通斷狀態。ifplugd一般用於嵌入式Linux環境,用於實時監測網口事件,其可以指定具體的腳本用來處理具體的事件。
下面是ifplugd的基本命令參數。
-n Don't daemonize #以前臺運行方式運行,默認爲後臺方式。
-s Don't log to syslog
-i IFACE Interface #指定監測網口
-f/-F Treat link detection error as link down/link up
(otherwise exit on error)
-a Don't up interface at each link probe
-M Monitor creation/destruction of interface
(otherwise it must exist)
-r PROG Script to run #指定檢測到網絡事件時,要執行的腳本
-x ARG Extra argument for script
-I Don't exit on nonzero exit code from script #腳本執行失敗時,ifplugd不會停止運行
-p Don't run script on daemon startup
-q Don't run script on daemon quit
-l Run script on startup even if no cable is detected
-t SECS Poll time in seconds
-u SECS Delay before running script after link up #檢測到link up,延遲一段時間再執行腳本
-d SECS Delay after link down
-m MODE API mode (mii, priv, ethtool, wlan, iff, auto)
-k Kill running daemon #殺死後臺ifplugd程序
ifplugd的使用命令一般如下:
/usr/bin/ifplugd -u 5 -I -l -i eth0 -r /etc/network/if.sh
根據具體事件執行腳本
if.sh爲一個腳本,其實現了關於網口up、down事件的處理邏輯,其內容一般爲:
ETH="$1"
STATE="$2"
if [ ${STATE} = "up" ]; then
/sbin/ifup ${ETH};
fi
if [ ${STATE} = "down" ]; then
/sbin/ifdown ${ETH};
fi
ETH爲網口名稱,比如,eth0,STATE爲具體的命令。
ifup和ifdown根據/etc/interface中的配置信息,完成對網口的操作。
# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
# The loopback interface
auto lo
iface lo inet loopback
# Wired or wireless interfaces
auto eth0
iface eth0 inet dhcp
延時執行
-u 5:表示在檢測到link up事件5秒之後,再運行if.sh腳本。這個選項在設備連接網絡設備時,十分的有用,比如,一個設備通過網線連
接到了一個路由,設備首先上電運行,而後路由器再上電,如果設備在檢測到link up之後,立即執行if.sh腳本,那麼,很有可能由於路
由器還未完全啓動完畢,而導致設備無法獲取到IP地址,而通過-u選項延遲一段時間爲的是等待路由器完成啓動。
nc
nc又名netcat,它的功能十分的強大,既可以爲作爲UDP、TCP客戶端去連接服務器,可以作爲UDP、TCP服務器等待客戶端的連接。當你寫了一個TCP客戶端,想測試一下它的功能,但是,這時候需要一個TCP服務端,你可能會再次實現一個,有了nc,完全沒有這個必要,你只要簡單運行nc指定端口,一個簡單TCP的服務端就搭建好了,酷不酷。
-
nc作爲TCP服務端,端口爲8081
nc -l 8081 # -l指定TCP的監聽端口
-
nc作爲TCP客戶端,去連接服務端
nc SERVER_IP 8081
-
nc作爲UDP服務端,端口爲8081
nc -u -l 8081 # -u指定爲UDP協議
-
nc作爲UDP客戶端,去連接服務端
nc -u SERVER_IP 8081
-
端口掃描
nc -zv www.google.com 1-1000 #掃描www.google.com 1-1000端口
-
文件傳輸
文件接收方: nc -l port > filename # port指定TCP端口,filename文件名 文件發送方: nc SERVER_IP port < filename # SERVER_IP指定文件接收方IP地址和端口號,filename指定要發送的文件 這個命令太酷了,運用TCP模式下的nc,簡單幾個參數就可以實現可靠的文件傳輸,太棒了。
-
克隆硬盤或者分區
其與文件傳輸類似,主要藉助了dd這個文件拷貝命令。
文件接收方: nc -l port | dd of=/dev/sda #指定接收方的磁盤分區,或者使用of=filename,將數據保存到文件中。 文件發送方: dd if=/dev/sda | nc SERVER_IP port
好了,以上就是linux下使用比較高頻的工具,本文只介紹了各個工具的基本用法,大家如有興趣可以通過Man手冊深入探究,Enjoy it!