必備Linux網路測試與診斷工具:全面提升網路效能的實用技巧

測試網路連通性

ping

顯示正確的路由表

ip route

route

跟蹤路由

traceroute

tracepath

mtr

確定名稱伺服器使用

nslookup

host

dig

抓包工具

tcpdump

wireshark

安全掃描工具

nmap

netcat :網路界的瑞士軍刀,即nc

流量控制工具

tc

範例:

tc qdisc

add

dev eth0 root netem loss

50%

tc qdisc

add

dev eth0 root netem delay

1000

ms

tc qdisc

show

dev eth0

tc qdisc del

fping

fping是一個程式,用於將ICMP探測傳送到網路主機,類似於

ping

,fping的歷史由來已久:Roland

Schemers在

1992

年確實釋出了它的第一個版本,從那時起它就確立了自己的地位,成為網路診斷和統

計的標準工具

相對於

ping

多個主機時效能要高得多。 fping完全不同於

ping

,可以在命令列上定義任意數量的主機,

或者指定包含要

ping

的IP地址或主機列表的檔案, 常在shell 指令碼中使用

CentOS 中由EPEL源提供
官網:http://www.fping

.org

/

[

root@centos8 ~

]

#yum -y install fping

[

root@centos8 ~

]

#fping 10.0.0.7
10.0.0.7is

alive

[

root@centos7 ~

]

#echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

[

root@centos8 ~

]

#fping 10.0.0.7
10.0.0.7is

unreachable

[

root@centos8 ~

]

#fping 10.0.0.7
10.0.0.7is

unreachable

[

root@centos8 ~

]

#fping 10.0.0.7 10.0.0.8
10.0.0.8is

alive

10.0.0.7is

unreachable

#-g 選項可以指定網段或地址範圍

[

root@centos8 ~

]

#fping -g 10.0.0.0/24
10.0.0.1is

alive

10.0.0.2is

alive

10.0.0.8is

alive

10.0.0.100is

alive

ICMP Host Unreachable

from10.0.0.8for

ICMP Echo sent to

10.0.0.3

[

root@centos8 ~

]

#fping -g 10.0.0.5 10.0.0.10
10.0.0.8is

alive

ICMP Host Unreachable

from10.0.0.8for

ICMP Echo sent to

10.0.0.6

ICMP Host Unreachable

from10.0.0.8for

ICMP Echo sent to

10.0.0.6

#對檔案中的主機時行測試

[

root@centos8 ~

]

#tee hosts.txt <<EOF
10.0.0.7
10.0.0.6

EOF

10.0.0.7
10.0.0.6

[

root@centos8 ~

]

#fping < hosts.txt
10.0.0.6is

alive

10.0.0.7is

unreachable

[

root@centos8 ~

]

#fping -s < hosts.txt
10.0.0.6is

alive

10.0.0.7is

unreachable

2

targets

1

alive

1

unreachable

0

unknown addresses

tcpdump

網路資料包截獲分析工具。支援針對網路層、協議、主機、網路或埠的過濾。並提供and、or、not等邏輯語句幫助去除無用的資訊。
語法:

tcpdump [-adeflnNOpqStvx][-c<資料包數目>][-dd][-ddd][-F<表達檔案>][-i<網路介面>][-r<

資料包檔案>][-s<資料包大小>][-tt][-T<資料包型別>][-vv][-w<資料包檔案>][輸出資料欄位]

引數說明:

-a 嘗試將網路和廣播地址轉換成名稱。
-c<資料包數目> 收到指定的資料包數目後,就停止進行傾倒操作。
-d 把編譯過的資料包編碼轉換成可閱讀的格式,並傾倒到標準輸出。
-dd 把編譯過的資料包編碼轉換成C語言的格式,並傾倒到標準輸出。
-ddd 把編譯過的資料包編碼轉換成十進位制數字的格式,並傾倒到標準輸出。
-e 在每列傾倒資料上顯示連線層級的檔案頭。
-f 用數字顯示網際網路地址。
-F<表達檔案> 指定內含表達方式的檔案。
-i<網路介面> 使用指定的網路截面送出資料包。
-l 使用標準輸出列的緩衝區。
-n 不把主機的網路地址轉換成名字。
-N 不列出域名。
-O 不將資料包編碼最佳化。
-p 不讓網路介面進入混雜模式。
-q 快速輸出,僅列出少數的傳輸協議資訊。
-r<資料包檔案> 從指定的檔案讀取資料包資料。
-s<資料包大小> 設定每個資料包的大小。
-S 用絕對而非相對數值列出TCP關聯數。
-t 在每列傾倒資料上不顯示時間戳記。
-tt 在每列傾倒資料上顯示未經格式化的時間戳記。
-T<資料包型別> 強制將表達方式所指定的資料包轉譯成設定的資料包型別。
-v 詳細顯示指令執行過程。
-vv 更詳細顯示指令執行過程。
-x 用十六進位制字碼列出資料包資料。
-w<資料包檔案> 把資料包資料寫入指定的檔案。

範例:

[

root@CentOS-8~

]

# tcpdump -D
1.bond0

[

Up

,

Running

]

2.eth1

[

Up

,

Running

]

3.lo

[

Up

,

Running

,

Loopback

]

4.any(Pseudo-devicethatcapturesonallinterfaces)

[

Up

,

Running

]

5.eth0

[

Up

]

6.virbr0

[

Up

]

7.bluetooth-monitor(BluetoothLinuxMonitor)

[

none

]

8.nflog(Linuxnetfilterlog(NFLOG)interface)

[

none

]

9.nfqueue(Linuxnetfilterqueue(NFQUEUE)interface)

[

none

]

10.bluetooth0(Bluetoothadapternumber0)

[

none

]

11.usbmon0(AllUSBbuses)

[

none

]

12.usbmon1(USBbusnumber1)
13.usbmon2(USBbusnumber2)
14.virbr0-nic

[

none

]

#不指定任何引數,監聽第一塊網絡卡上經過的資料包。主機上可能有不止一塊網絡卡,所以經常需要指定網絡卡。
tcpdump
#監聽特定網絡卡
tcpdump-ien0
#監聽特定主機,監聽主機10.0.0.100 的通訊包,注意:出、入的包都會被監聽。
tcpdumphost10.0.0.100
#特定來源、目標地址的通訊
#特定來源
tcpdumpsrchosthostname
#特定目標地址
tcpdumpdsthosthostname
#如果不指定src跟dst,那麼來源或者目標是hostname的通訊都會被監聽
tcpdumphosthostname
#面試題

[

root@centos8~

]

#tcpdump -i eth0 -nn icmp and src host 10.0.0.6 and dst host
10.0.0.7
#特定埠
tcpdumpport3000
#監聽TCP/UDP,伺服器上不同服務分別用了TCP、UDP作為傳輸層,假如只想監聽TCP的資料包
tcpdumptcp
#來源主機+埠+TCP,監聽來自主機10.0.0.100在埠22上的TCP資料包
tcpdumptcpport22andsrchost10.0.0.100
#監聽特定主機之間的通訊
tcpdumpiphost10.0.0.101and10.0.0.102
#10.0.0.101和除了10.0.0.1之外的主機之間的通訊
tcpdumpiphost10.0.0.101and!10.0.0.1
#詳細示例
tcpdumptcp-ieth1-t-s0-c100anddstport!22andsrcnet192.168.1.0/24
-w./target.cap
(1)tcp:ipicmparprarptcp、udp、icmp這些選項等都要放到第一個引數的位置,用來過濾數
據報的型別
(2)-ieth1 :只抓經過介面eth1的包
(3)-t:不顯示時間戳
(4)-s0 :抓取資料包時預設抓取長度為68位元組。加上-S0後可以抓到完整的資料包
(5)-c100 :只抓取100個數據包
(6)dstport!22 :不抓取目標埠是22的資料包
(7)srcnet 192.168.1.0/24 :資料包的源網路地址為192.168.1.0/24
(8)-w./target.cap:儲存成cap檔案,方便用wireshark分析
#限制抓包的數量,如下,抓到1000個包後,自動退出
tcpdump-c1000
#儲存到本地,tcpdump預設會將輸出寫到緩衝區,只有緩衝區內容達到一定的大小,或者tcpdump退出時,
才會將輸出寫到本地磁碟,可以加上-U強制立即寫到本地磁碟(一般不建議,效能相對較差)
tcpdump-n-vvv-c1000-w/tmp/tcpdump_save.cap

nmap

掃描遠端主機工具,功能遠超越用世人皆知的 Ping 工具傳送簡單的 ICMP 回聲請求報文
官方幫助:https://nmap.org/book/man.html
格式:

nmap [Scan Type(s)] [Options] {target specification}

命令選項

-sT TCP connect() 掃描,這是最基本的 TCP掃描方式。這種掃描很容易被檢測到,在目標主機的日誌中會記錄大批的連線請求以及錯誤資訊

-sS TCP 同步掃描 (TCP SYN),因為不必全部開啟一個TCP連線,所以這項技術通常稱為半開掃描(half-open)。這項技術最大的好處是,很少有系統能夠把這記入系統日誌

-sF,-sX,-sN 秘密 FIN 資料包掃描、聖誕樹 (Xmas Tree)、空 (Null) 掃描模式。這些掃描方式的理論依據是:關閉的埠需要對你的探測包回應 RST 包,而開啟的埠必需忽略有問題的包

-sP ping 掃描,用 ping 方式檢查網路上哪些主機正在執行。當主機阻塞 ICMP echo 請求包是ping 掃描是無效的。nmap 在任何情況下都會進行 ping 掃描,只有目標主機處於執行狀態,才會進行後續的掃描

-sU UDP 的資料包進行掃描,想知道在某臺主機上提供哪些 UDP 服務,可以使用此選項

-sA ACK 掃描,這項高階的掃描方法通常可以用來穿過防火牆。

-sW 滑動視窗掃描,非常類似於 ACK 的掃描

-sR RPC 掃描,和其它不同的埠掃描方法結合使用。

-b FTP 反彈攻擊 (bounce attack),連線到防火牆後面的一臺

FTP 伺服器做代理,接著進行埠掃描。

-P0 在掃描之前,不 ping 主機。

-PT 掃描之前,使用 TCP ping 確定哪些主機正在執行

-PS 對於 root 使用者,這個選項讓 nmap 使用 SYN 包而不是 ACK 包來對目標主機進行掃描。

-PI 設定這個選項,讓 nmap 使用真正的 ping(ICMP echo 請求)來掃描目標主機是否正在執行。

-PB 這是預設的 ping 掃描選項。它使用 ACK(-PT) 和 ICMP(-PI) 兩種掃描型別並行掃描。如果防火牆能夠過濾其中一種包,使用這種方法,你就能夠穿過防火牆。

-O 這個選項啟用對 TCP/IP 指紋特徵 (fingerprinting) 的掃描,獲得遠端主機的標誌,也就是作業系統型別

-I 開啟 nmap 的反向標誌掃描功能。

-f 使用碎片 IP 資料包傳送SYN、FIN、XMAS、NULL。包增加包過濾、入侵檢測系統的難度,使其無法知道你的企圖

-v 冗餘模式。強烈推薦使用這個選項,它會給出掃描過程中的詳細資訊。

-S <IP> 在一些情況下,nmap 可能無法確定你的源地址。在這種情況使用這個選項給出指定 IP 地址

-g port 設定掃描的源埠

-oN 把掃描結果重定向到一個可讀的檔案 logfilename 中

-oS 掃描結果輸出到標準輸出。

--host_timeout 設定掃描一臺主機的時間,以毫秒為單位。預設的情況下,沒有超時限制

--max_rtt_timeout 設定對每次探測的等待時間,以毫秒為單位。如果超過這個時間限制就重傳或者超時。預設值是大約 9000 毫秒

--min_rtt_timeout 設定 nmap對每次探測至少等待你指定的時間,以毫秒為單位

-M count 置進行 TCP connect() 掃描時,最多使用多少個套接字進行並行的掃描

範例:
#Tcpack

掃描,併發

2000

,速度快

nmap-n-PA--min-parallelism2000172.16.0.0

/

16

#僅列出指定網段上的每臺主機,不傳送任何報文到目標主機.

[root@centos8 ~]#nmap-sL10.0.0.0

/

24
StartingNmap7.70

(

https

:

//nmap.org ) at 2020-04-23 12:28 CST

Nmap scan report for

10.0

.

0.0

Nmap scan report for

10.0

.

0.1

......

Nmap scan report for

10.0

.

0.254

Nmap scan report for

10.0

.

0.255

Nmap

done

:

256

IP addresses (

0

hosts up) scanned in

1.04

seconds

#可以指定一個IP地址範圍

[root

@centos8

~]#nmap -sP

10.0

.

0.1

-

10

Starting Nmap

7.70

(

https

:

//nmap.org ) at 2020-04-23 12:30 CST

Nmap

scan

report for

10.0

.

0.1

Host is up (

0.000081s

latency).

#批次掃描一個網段的主機存活數

nmap -sP -v

192.168

.

1.0

/

24

nmap –v –sn ip/

24

#有些主機關閉了ping檢測,所以可以使用-P0跳過ping的探測,可以加快掃描速度.

nmap -P0

192.168

.

1.100

#掃描主機

nmap –v –A IP

#一次性掃描多臺目標主機

[root

@centos8

~]#nmap

10.0

.

0.610.0

.

0.7

Starting Nmap

7.70

(

https

:

//nmap.org ) at 2020-04-23 12:39 CST

Nmap

scan

report for

10.0

.

0.6

Host is up (

0.00055s

latency).
#探測目標主機開放的埠,可指定一個以逗號分隔的埠列表(如-PS22,

443

,

80

)

[root

@centos8

~]#nmap -PS22,

80

,

44310.0

.

0.1

Starting Nmap

7.70

(

https

:

//nmap.org ) at 2020-04-23 12:31 CST

Nmap

scan

report for

10.0

.

0.1

#使用SYN半開放掃描

[root

@centos8

~]#nmap -sS

10.0

.

0.1

Starting Nmap

7.70

(

https

:

//nmap.org ) at 2020-04-23 12:33 CST

#掃描開放了TCP埠的裝置

[root

@centos8

~]#nmap -sT

10.0

.

0.1

Starting Nmap

7.70

(

https

:

//nmap.org ) at 2020-04-23 12:34 CST

#掃描開放了UDP埠的裝置

[root

@centos8

~]#nmap -sU

10.0

.

0.1

Starting Nmap

7.70

(

https

:

//nmap.org ) at 2020-04-23 12:34 CST

#只掃描UDP埠

nmap –e eth1 -sU -O

10.0

.

0.1

#掃描TCP和UDP埠

nmap -sTU -O

10.0

.

0.1

#用於掃描目標主機服務版本號

[root

@centos8

~]#nmap -sV

10.0

.

0.7

Starting Nmap

7.70

(

https

:

//nmap.org ) at 2020-04-23 12:37 CST

#檢視主機當前開放的埠

nmap localhost

#檢視主機埠(

1024

-

65535

)中開放的埠

nmap -p

1024

-

65535

localhost

#探測目標主機開放的埠

nmap -PS

10.0

.

0.1

#探測所列出的目標主機埠

nmap -PS22,

80

,

330610.0

.

0.1

#探測目標主機作業系統型別

nmap -O

10.0

.

0.1

#探測目標主機作業系統型別

nmap -A

10.0

.

0.1

連結:https://www.cnblogs.com/xuanlv-0413/p/14672191.html
(版權歸原作者所有,侵刪)


相關文章