Linux-網路工具

weixin_34402408發表於2018-07-10

Linux常用網路工具簡單整理一下。

ping

檢查網路連通性以及網速,域名解析。

ping www.baidu.com
  • 預設一直髮送ICMP包(Internet Control Message Protocol,Internet控制報文協議)直到停止。
  • -c 指定傳送資料包的個數
  • -W 指定最長等待時間
  • -I 指定傳送包的網路卡(多網路卡情況下)

注意:

  • 執行時按下Ctrl + \ 顯示summary資訊,包括。傳送包數量,接受數量,丟包率
  • ping只能使用ipv4, 如果需要使用ipv6, 可以使用ping6命令

netstat

檢視當前建立的所有網路連線。
檢視埠占用:

netstat -an | 3306

檢視本地路由表:

netstat -nr

lsof

lsof命令用來檢視開啟的檔案(list open file),由於Linux中‘一切皆檔案’,那麼socket,pipe等也是檔案,因此能夠檢視網路連線和網路裝置,其中網路裝置相關的是-i選項,它輸出符合條件的程式(4,6,協議,:埠,@ip等),格式為[46][protocol][@hostname|hostaddr]
檢視埠3306有沒有開啟,哪個程式開啟的:

lsof -i:3306

可以指定多個條件,預設是OR關係,要指定AND關係,需要傳入-a引數,檢視22埠且使用ipv6連線:

lsof -c sshd -i 6 -a -i :22

列出所有與192.168.56.1的ipv4連線:

lsof -I 4@192.168.56.1

iftop

檢視網路流量的工具(display bandwidth usage on an interface by host):

iftop

nc

nc(netcat),功能強大的網路工具,可以作為網路應用的debug分析,建立不同型別的網路連線。功能很多,例如實現簡單的聊天工具,模擬ssh登入遠端主機,遠端傳輸檔案,埠掃描等。

掃描埠:

掃描某ip的1~100埠:

nc -zv 192.168.56.2 1-100 |& grep 'succeeded!'

聊天工具

A機器執行

nc -l 1234 # -l表示監聽(listen)

B機器執行

nc ipAddress 1234

兩臺機器輸入的資訊都會在對方機器顯示。實現了聊天功能。

檔案傳輸

B機器的data.txt傳輸到A機器。
A機器:

nc -l 1234 >./data.txt

B機器

nc ipAddress 1234 <./data.txt
遠端操作(類似ssh)

B需要遠端操作A。(未測試成功)
A機器:

rm -f /tmp/f; mkfifo /tmp/f
cat /tmp/f | /bin/sh -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f

B機器:

nc ipAddress 1234
傳送http請求
echo 'GET / HTTP/1.1' | nc -v 220.181.57.216 80

tcpdump

tcpdump(dump traffic on a network)是一個命令列抓包工具。能抓任何協議的包(不僅僅是tcp)。
抓取目標主機192.168.56.1通過埠22的包:

sudo tcpdump -n 'dst host 192.168.56.1 && port 22'

telnet

telnet協議客戶端(user interface to the TELNET protocol),不過並不限於telnet協議,埠也可以探測。
檢視本地埠22是否開放:

pengjunzhe$ telnet localhost 22
Trying ::1...
Connected to localhost.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.6

ifconfig

網路卡配置工具(configure a network interface),可以用來檢視網路卡資訊(IP地址,傳送包數個數,接受包數,丟包數等)以及配置網路卡(開啟關閉網路卡,修改網路mtu,修改IP地址等)。
檢視網路卡ip地址:

ifconfig

為網路卡eth0新增一個新的地址(虛擬網路卡):

~$ sudo ifconfig eth0:0 10.103.240.2/24
~$ ifconfig eth0:0
eth0:0    Link encap:Ethernet  HWaddr 08:00:27:c9:b4:f2
          inet addr:10.103.240.2  Bcast:10.103.240.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

關閉/開啟網路卡:

sudo ifconfig eth0 down
sudo ifconfig eth0 up

nslookup & dig

nslookup用於互動式域名解析(query Internet name server interactively),也可以直接傳入域名作為Ad-Hoc命令使用。
檢視baidu.com的IP地址:

~ $ nslookup baidu.com
Server:     10.27.207.164
Address:    10.27.207.164#53

Non-authoritative answer:
Name:   baidu.com
Address: 220.181.57.216
Name:   baidu.com
Address: 123.125.115.110

檢視使用的DNS伺服器地址:

~ $ nslookup
> server
Default server: 10.27.207.164
Address: 10.27.207.164#53
Default server: 10.27.207.129
Address: 10.27.207.129#53

dig命令也是域名解析工具(DNS lookup utility),但是提供更資訊更全面:

~$ dig baidu.com

; <<>> DiG 9.10.6 <<>> baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19315
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;baidu.com.         IN  A

;; ANSWER SECTION:
baidu.com.      270 IN  A   220.181.57.216
baidu.com.      270 IN  A   123.125.115.110

;; Query time: 18 msec
;; SERVER: 10.27.207.164#53(10.27.207.164)
;; WHEN: Fri Jul 06 22:28:23 CST 2018
;; MSG SIZE  rcvd: 70

whois

檢視域名所有者的資訊(client for the whois directory service),例如註冊郵箱,手機號碼,域名服務商等:

whois taobao.com

route

route用於檢視和修改路由表.
檢視路由表(mac不適用):

[root@host ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         104.224.152.1   0.0.0.0         UG    100    0        0 eth0
104.224.152.0   0.0.0.0         255.255.248.0   U     100    0        0 eth0

增加/刪除路由分別是add/del子命令。
刪除預設路由:

sudo route del default

增加預設路由,網管為192.168.1.1,網路卡為brqcb225471-1f:

sudo route add default gw 192.168.1.1 dev brqcb225471-1f

ip

強大的網路工具,可以調低ifconfignetstatroutearp等命令。
檢視網路卡eth0的IP地址:

~$ sudo ip addr ls  dev eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:9a:d5:d1 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.2/24 brd 192.168.56.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe9a:d5d1/64 scope link
       valid_lft forever preferred_lft forever

檢視網路卡eth0配置:

~$ sudo ip link ls eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 08:00:27:9a:d5:d1 brd ff:ff:ff:ff:ff:ff

檢視路由:

~$ ip route
default via 192.168.1.1 dev brqcb225471-1f
172.17.0.0/16 dev docker0  proto kernel  scope link  src 172.17.0.1
192.168.1.0/24 dev brqcb225471-1f  proto kernel  scope link  src 192.168.1.105
192.168.56.0/24 dev eth1  proto kernel  scope link  src 192.168.56.2

檢視arp資訊:

~$ sudo ip neigh
192.168.56.1 dev eth1 lladdr 0a:00:27:00:00:00 REACHABLE
192.168.0.6 dev vxlan-80 lladdr fa:16:3e:e1:30:c8 PERMANENT
172.17.0.2 dev docker0 lladdr 02:42:ac:11:00:02 STALE
192.168.56.3 dev eth1  FAILED
192.168.1.1 dev brqcb225471-1f lladdr 30:fc:68:41:12:c6 STALE

檢視網路命令空間:

~$ sudo ip netns ls
qrouter-24bf83c7-f61d-496b-8115-09f0f3d64d21
qdhcp-9284d7a8-711a-4927-8a10-605b34372768
qdhcp-cb225471-1f85-4771-b24b-a4a7108d93a4

進入某個網路命令空間:

~$ sudo ip netns exec qrouter-24bf83c7-f61d-496b-8115-09f0f3d64d21 bash
~# ifconfig
qg-0d258e6d-83 Link encap:Ethernet  HWaddr fa:16:3e:93:6f:a3
          inet addr:172.16.1.101  Bcast:172.16.1.255  Mask:255.255.255.0
          inet6 addr: fe80::f816:3eff:fe93:6fa3/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1035 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:102505 (102.5 KB)  TX bytes:1200 (1.2 KB)

brctl

檢視網橋,建立網橋,把網路卡加入網橋等。

traceroute

統計到目標主機的沒一條的網路狀態(print the route packets trace to network host)。常用來診斷網路故障。
本地連線到百度的過程:

~ pengjunzhe$ traceroute -I -n baidu.com
traceroute: Warning: baidu.com has multiple addresses; using 123.125.115.110
traceroute to baidu.com (123.125.115.110), 64 hops max, 72 byte packets
 1  10.27.203.254  2.308 ms  1.861 ms  1.606 ms
 2  10.27.193.141  1.111 ms *  2.259 ms
 3  10.27.192.145  1.906 ms  2.300 ms  2.146 ms
 4  218.1.108.145  4.071 ms  3.943 ms  3.363 ms
 5  101.95.110.129  4.275 ms  3.927 ms  3.876 ms
 6  61.152.20.73  4.934 ms  3.855 ms  5.196 ms
 7  124.74.215.217  4.560 ms  4.476 ms  5.581 ms
 8  * * 101.95.89.46  5.283 ms
 9  61.152.24.6  7.456 ms  8.412 ms  6.852 ms
10  202.97.60.129  28.235 ms  29.109 ms  54.368 ms
11  * 202.97.88.250  29.685 ms *
12  * 219.158.44.117  36.199 ms  39.041 ms
13  219.158.4.157  28.637 ms  33.961 ms  29.776 ms
14  202.96.12.82  30.744 ms  32.519 ms  30.622 ms
15  61.148.152.18  31.620 ms  29.367 ms  28.745 ms
16  123.125.248.98  104.687 ms  28.791 ms *
17  * * *
18  123.125.115.110  28.371 ms  28.001 ms  28.720 ms

mtr

網路診斷工具(a network diagnostic tool),整合了ping和traceroute的功能並實時重新整理。

ss

ss命令是一個用於檢視網路連線的工具(another utility to investigate sockets),用來顯示處於活動狀態的套接字資訊。

curl

強大的URL傳輸工具,支援FILE, FTP, HTTP, HTTPS, IMAP, LDAP, POP3,RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET以及TFTP等協議。
能模擬所有的瀏覽器的行為請求,例如refer,cookie,agent。也可以模擬表單資料。

常用引數有:

  • -i 顯示頭部資訊
  • -I 只顯示頭部資訊,不顯示正文
  • -X 指定請求方法,比如GET、POST等
  • -d 傳送資料
  • --form模擬表單,利用這個引數可以上傳檔案、模擬點選按鈕等
  • -A 指定使用者代理,比如Mozilla/4.0
  • -b 設定cookie
  • -c 指定cookie檔案
  • -e 指定referer,有些網址必須從某個頁面跳轉過去
  • --header 設定請求的頭部資訊
  • --user 有些頁面需要HTTP認證, 傳遞name:password認證

wget

非互動網路下載工具(The non-interactive network downloader)。
最簡單的方法就是加上檔案url:

wget http://xxx/xxx/video.mp4
遞迴

使用-r可以遞迴下載的網頁。預設遞迴深度為4,相當於爬蟲,通過-l指定遞迴深度。

端點續傳

預設不開啟端點續傳功能,傳入-c引數後開啟。

批量下載

可以吧多個URL寫入檔案,然後用-i指定下載檔案列表:

wget -I download.txt
儲存檔名

如果h不指定檔名,預設以最後一個符合/後面的字元作為儲存檔名,手動-O指定儲存檔名。

其他

--limit-rate限制最大下載速度
-b 後臺下載
-A 指定下載的檔案格式
映象下載整個網站:

wget --mirror -p --convert-links -P baidu baidu.com

axel

多執行緒下載工具(a light download accelerator for Linux),通過多連線,大幅提高下載速度。預設支援斷線下載。
開啟20個執行緒下載檔案:

axel -n 20 URL

nethogs

根據程式檢視流量資訊。

iptables

強大的包過濾,處理工具。能夠實現防火牆,NAT等功能。

相關文章