成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

事到如今已經(jīng)不敢問的tcpdump的使用方法

ShevaKuilin / 3020人閱讀

摘要:在達(dá)到的重復(fù)發(fā)送次數(shù)的最大值之前,工具好像已經(jīng)并終結(jié)了。以下的例子為,捕獲接收方為端口號以及接收方為端口號的包。執(zhí)行結(jié)果為了測試啟動了和。想要抑制磁盤使用量,需要將舊文件定期刪除。保持的文件為最近的個。確認(rèn)執(zhí)行前的用戶權(quán)限。

1 構(gòu)成

master: SZE-L0149625

node1: SZE-L0149628

在 node1 上啟動 httpd。 在 master 上通過 curl 執(zhí)行請求。

  master  -------------------- > node1
  curl http://node1:2800           httpd(port=2800)
2 環(huán)境

master, node1 的 OS 都是 CentOS 7.5。

[root@SZE-L0149625 ~]# cat /etc/system-release
CentOS Linux release 7.5.1804 (Core)
3 TCP 包的采集方法 3.1 SYN flag(=1) 包的采集方法
---------
0. 目標(biāo)
---------

從 master 發(fā)送 TCP 包到 node1 的 2800 端口,采集★1和★2的包。


   master                            node1
     |                                 |
     |------------- SYN -------------->|★1
     |<------------ SYN +ACK ----------|★2
     |------------- ACK -------------->|
     |                                 |



--------------------
1. 在 node1 執(zhí)行
--------------------

安裝 nc 工具

[root@SZE-L0149628 ~]# yum install nmap-ncat


啟動 nc 工具在 80 端口待機。

[root@SZE-L0149628 ~]# nc -l 80 &
[1] 23268



確認(rèn) nc 工具正在待機。

[root@SZE-L0149628 ~]# lsof -i :80
COMMAND   PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
nc      23798 root    3u  IPv6 13435053      0t0  TCP *:http (LISTEN)
nc      23798 root    4u  IPv4 13435054      0t0  TCP *:http (LISTEN)


執(zhí)行 tcpdump。采集帶有 SYN flag 的 TCP 包(上面的★1,★2)。

[root@node1 ~]# tcpdump -i eth0 "(tcp[tcpflags] & tcp-syn)" != 0

--------------------
2. 在 master 執(zhí)行
--------------------

安裝 nc 工具。

[root@SZE-L0149625 ~]# yum install nmap-ncat


往 node1 (30.99.142.165) 的 80 端口發(fā)送 TCP 包。

[root@SZE-L0149625 ~]# nc sysnode-01.local 80 -vv
Ncat: Version 7.50 ( https://nmap.org/ncat )
NCAT DEBUG: Using system default trusted CA certificates and those in /usr/share/ncat/ca-bundle.crt.
NCAT DEBUG: Unable to load trusted CA certificates from /usr/share/ncat/ca-bundle.crt: error:02001002:system library:fopen:No such file or directory
libnsock nsi_new2(): nsi_new (IOD #1)
libnsock nsock_connect_tcp(): TCP connection requested to 30.99.142.165:80 (IOD #1) EID 8
libnsock nsock_trace_handler_callback(): Callback: CONNECT SUCCESS for EID 8 [30.99.142.165:80]
Ncat: Connected to 30.99.142.165:80.
libnsock nsi_new2(): nsi_new (IOD #2)
libnsock nsock_read(): Read request from IOD #1 [30.99.142.165:80] (timeout: -1ms) EID 18
libnsock nsock_readbytes(): Read request for 0 bytes from IOD #2 [peer unspecified] EID 26
test
libnsock nsock_trace_handler_callback(): Callback: READ SUCCESS for EID 26 [peer unspecified] (5 bytes): test.
libnsock nsock_trace_handler_callback(): Callback: WRITE SUCCESS for EID 35 [30.99.142.165:80]
libnsock nsock_readbytes(): Read request for 0 bytes from IOD #2 [peer unspecified] EID 42


test    => 輸入 "test"。

--------------------
3. 在 node1 確認(rèn)結(jié)果
--------------------

采集 SYN flag 包(★1,★2)。

[root@SZE-L0149628 ~]# tcpdump -i eth0 "(tcp[tcpflags] & tcp-syn)" != 0 | grep -i http
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
18:12:42.972573 IP master-01.local.directplaysrvr > SZE-L0149628.http: Flags ★1[S], seq 1119439142, win 64240, options [mss 1460,sackOK,TS val 792704556 ecr 0,nop,wscale 7], length 0
18:12:42.972705 IP SZE-L0149628.http > master-01.local.directplaysrvr: Flags ★2[S.], seq 116118424, ack 1119439143, win 65160, options [mss 1460,sackOK,TS val 3344984844 ecr 792704556,nop,wscale 7], length 0
test

test   =>在master輸入的"test"在node1成功確認(rèn)了。
3.2 只采集 SYN 包(只有SYN flag)
采集★1的數(shù)據(jù)包

   master                            node1
     |                                 |
     |------------- SYN -------------->|★1
     |------------- SYN -------------->|★1(重發(fā))
     |------------- SYN -------------->|★1(重發(fā))
     |------------- SYN -------------->|★1(重發(fā))
     |                                 |


--------------------
1. 在 node1 執(zhí)行
--------------------
丟棄進入 80 端口的 TCP 包。
[root@SZE-L0149628 ~]# iptables -A INPUT -p tcp --dport 80 -j DROP

檢查設(shè)定。
[root@SZE-L0149628 ~]# iptables -nvL INPUT --line-numbers
Chain INPUT (policy ACCEPT 58 packets, 18279 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80

啟動nc進程監(jiān)聽80端口。
[root@SZE-L0149628 ~]# nc -l 80 &
[1] 2518

確認(rèn)nc進程監(jiān)聽的端口。
[root@SZE-L0149628 ~]# lsof -i:80
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nc      2518 root    3u  IPv6  30891      0t0  TCP *:http (LISTEN)
nc      2518 root    4u  IPv4  30892      0t0  TCP *:http (LISTEN)

啟動tcpdump。設(shè)定為只截取SYN包。
[root@SZE-L0149628 ~]# tcpdump -i eth0 "(tcp[tcpflags] & tcp-syn)" != 0 and "(tcp[tcpflags] & tcp-ack) ==0"

--------------------
2. 在master執(zhí)行
--------------------
往node1的80端口發(fā)送TCP包。
[root@SZE-L0149625 sar]# nc sysnode-01.local 80 -vv
Ncat: Version 6.40 ( http://nmap.org/ncat )
libnsock nsi_new2(): nsi_new (IOD #1)
libnsock nsock_connect_tcp(): TCP connection requested to 30.99.142.165:80 (IOD #1) EID 8
libnsock nsock_trace_handler_callback(): Callback: CONNECT TIMEOUT for EID 8 [30.99.142.165:80]
Ncat: Connection timed out.  => 
在達(dá)到SYN的重復(fù)發(fā)送次數(shù)的最大值之前,nc工具好像已經(jīng)timeout并終結(jié)了。

--------------------
3. 在node1確認(rèn)結(jié)果
--------------------
確認(rèn)tcpdump的執(zhí)行結(jié)果??梢钥吹街徊东@到了SYN包(★記號)。
[root@SZE-L0149628 ~]# tcpdump -i eth0 "(tcp[tcpflags] & tcp-syn)" != 0 and "(tcp[tcpflags] & tcp-ack) ==0"
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
11:20:35.970211 IP master-01.local.48298 > SZE-L0149628.http: Flags ★[S], seq 149498950, win 29200, options [mss 1460,sackOK,TS val 8276013 ecr 0,nop,wscale 7], length 0
11:20:36.971734 IP master-01.local.48298 > SZE-L0149628.http: Flags ★[S], seq 149498950, win 29200, options [mss 1460,sackOK,TS val 8277017 ecr 0,nop,wscale 7], length 0
11:20:39.252406 IP master-01.local.48298 > SZE-L0149628.http: Flags ★[S], seq 149498950, win 29200, options [mss 1460,sackOK,TS val 8279024 ecr 0,nop,wscale 7], length 0
11:20:42.986909 IP master-01.local.48298 > SZE-L0149628.http: Flags ★[S], seq 149498950, win 29200, options [mss 1460,sackOK,TS val 8283032 ecr 0,nop,wscale 7], length 0
- 因為nc工具timeout了,捕獲到這里就結(jié)束了 -


-----------------------------
4. 清理(iptables規(guī)則消除)
-----------------------------
[root@SZE-L0149628 ~]# iptables -L INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    DROP       tcp  --  anywhere             anywhere             tcp dpt:http
[root@SZE-L0149628 ~]# iptables -D INPUT 1
[root@SZE-L0149628 ~]# iptables -L INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
[root@node1 ~]#
3.3 捕獲FIN包的方法
捕獲★1和★2

   master                            node1
     |                                 |
     |------------- SYN -------------->|
     |<------------ SYN + ACK ---------|
     |------------- ACK -------------->|
     |                                 |
     |                                 |
     |------------- FIN -------------->|★1
     |<------------ FIN + ACK ---------|★2
     |------------- ACK -------------->|
     |                                 |
     |                                 |

[root@SZE-L0149628 ~]# tcpdump -i eth0 "(tcp[tcpflags] & tcp-fin)" != 0
-中略-
20:46:33.720744 IP master-01.local.35582 > SZE-L0149628.http: Flags [F.], seq 635647794, ack 894972442, win 319, options [nop,nop,TS val 4009862 ecr 3088873], length 0
20:46:33.721687 IP SZE-L0149628.http > master-01.local.35582: Flags [F.], seq 1, ack 1, win 227, options [nop,nop,TS val 3088875 ecr 4009862], length 0
-以下,省略-
3.4 其他

根據(jù)man的描述,下列為flag可選項。

tcp-fin, tcp-syn, tcp-rst, tcp-push, tcp-act, tcp-urg

以下為,從man tcpdump抽取的內(nèi)容。
Some offsets and field values may be expressed as names rather than as numeric values. 
For example tcp[13] may be replaced with tcp[tcpflags]. 
The following TCP flag field values are also available: 
    tcp-fin,  tcp-syn,  tcp-rst,  tcp-push, tcp-act, tcp-urg.

This can be demonstrated as:
       tcpdump -i xl0 "tcp[tcpflags] & tcp-push != 0"

Note  that  you should use single quotes or a backslash in the expression 
to hide the AND ("&") special character from the shell.
4 顯示MAC address的方法(-e)
[root@SZE-L0149628 ~]# tcpdump -e -i eth0 port 80
21:04:41.208201 00:0c:29:18:5c:90 (oui Unknown) > 00:0c:29:a5:64:c8 (oui Unknown), ethertype IPv4 (0x0800), length 74: master-01.local.35770 > SZE-L0149628.http: Flags [S], seq 844789185, win 29200, options [mss 1460,sackOK,TS val 5097353 ecr 0,nop,wscale 7], length 0
-以下,省略-
5 展示出multicast包
[root@drbd1 ~]# tcpdump -i eth0 -n multicast
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
21:45:03.460753 IP 192.168.0.3.mdns > 224.0.0.251.mdns: 0 [1au] PTR (QU)");
6 表示絕對sequence號碼而不是相對sequence號碼(-S)
[root@server ~]# tcpdump -i eth0 -S port 11111 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
11:26:33.080764 IP 192.168.0.110.48428 > 192.168.0.100.11111: Flags [S], seq 2964223143, win 29200, options [mss 1460,sackOK,TS val 1278557 ecr 0,nop,wscale 7], length 0
11:26:33.080981 IP 192.168.0.100.11111 > 192.168.0.110.48428: Flags [S.], seq 3868874227, ack 2964223144, win 28960, options [mss 1460,sackOK,TS val 1318048 ecr 1278557,nop,wscale 7], length 0
11:26:33.081787 IP 192.168.0.110.48428 > 192.168.0.100.11111: Flags [.], ack 3868874228, win 229, options [nop,nop,TS val 1278559 ecr 1318048], length 0
7 以簡潔方式表示(-q)
[root@SZE-L0149628 ~]# tcpdump -i eth0 port 80 -q
-中間省略-
22:08:54.904012 IP master-01.local.36554 > SZE-L0149628.http: tcp 0
22:08:54.904207 IP SZE-L0149628.http > master-01.local.36554: tcp 0
22:08:54.904678 IP master-01.local.36554 > SZE-L0149628.http: tcp 0
22:08:54.905582 IP master-01.local.36554 > SZE-L0149628.http: tcp 69
-以下省略-
8 指定網(wǎng)卡的方法 8.1 列出可以使用的網(wǎng)卡(-D)
[root@SZE-L0149628 ~]# tcpdump -D
1.eth0
2.cbr0
3.nflog (Linux netfilter log (NFLOG) interface)
4.nfqueue (Linux netfilter queue (NFQUEUE) interface)
5.usbmon1 (USB bus number 1)
6.usbmon2 (USB bus number 2)
7.any (Pseudo-device that captures on all interfaces)
8.lo
[root@SZE-L0149628 ~]#

  (*) cbr0是Docker的custom bridge
  
8.2 指定所有網(wǎng)卡的方法(-i any)

如果將網(wǎng)卡指定為any,則為指定所有的網(wǎng)卡。 any之際上是8.1中顯示的"any (Pseudo-device that captures on all interfaces)"。

監(jiān)聽端口11111。
[root@SZE-L0149628 ~]# nc -kl 11111

打開另一個終端(為方便,稱之為terminal-2)。執(zhí)行tcpdump。指定網(wǎng)卡為"any"。
[root@SZE-L0149628 ~]# tcpdump -i any port 11111 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes

再打開一個終端。在端口11111上建立TCP連接。SZE-L0149628為host名。
[root@SZE-L0149628 ~]# nc SZE-L0149628 11111

terminal-2的標(biāo)準(zhǔn)輸出中,可以看到tcpdump的執(zhí)行有信息顯示出來了。
[root@node1 ~]# tcpdump -i any port 11111 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
18:33:57.390145 IP 192.168.0.20.50330 > 192.168.0.20.11111: Flags [S], seq 1061960766, win 43690, options [mss 65495,sackOK,TS val 546666 ecr 0,nop,wscale 6], length 0
13:11:53.442157 IP 192.168.0.20.11111 > 192.168.0.20.50330: Flags [S.], seq 3185839519, ack 1061960767, win 43690, options [mss 65495,sackOK,TS val 546666 ecr 546666,nop,wscale 6], length 0
18:33:57.390245 IP 192.168.0.20.50330 > 192.168.0.20.11111: Flags [.], ack 1, win 683, options [nop,nop,TS val 546666 ecr 546666], length 0
-以下,省略-

9 指定端口號 9.1 指定多個端口號(or)

通過or來指定多個端口號。 以下的例子為,捕獲接收方為TCP端口號80以及接收方為UDP端口號123的包。

-------
1. 環(huán)境
-------
命令的執(zhí)行順序也記錄下來。


                   node1                admin
              (192.168.0.20)       (192.168.0.10)
                     |                    |
                     |                    | # systemctl start httpd
                     |                    | # systemctl start chronyd
                     |                    |
                     |                    | # tcpdump -i eth0 tcp dst port 80 or udp dst port 123 -nn
                     |                    |
                     |                    |
 # curl http://admin |                    |
                     |                    |
                     |                    |

-----------
2. 執(zhí)行結(jié)果
-----------
為了測試啟動了httpd和chronyd。
[root@admin ~]# systemctl start httpd
[root@admin ~]# systemctl start chronyd

執(zhí)行tcpdump。
[root@admin ~]# tcpdump -i eth0 tcp dst port 80 or udp dst port 123 -nn
可以從★看到,接收方TCP端口80的包被捕獲到。
19:40:09.350977 IP 192.168.0.20.55996 > 192.168.0.10.80: Flags [S], seq 3461504268, win 29200, options [mss 1460,sackOK,TS val 4294753712 ecr 0,nop,wscale 7], length 0
19:40:09.351719 IP 192.168.0.20.55996 > 192.168.0.10.80: Flags [.], ack 3444255170, win 229, options [nop,nop,TS val 4294753713 ecr 262765], length 0
19:40:09.351735 IP 192.168.0.20.55996 > 192.168.0.10.80: Flags [P.], seq 0:69, ack 1, win 229, options [nop,nop,TS val 4294753713 ecr 262765], length 69
19:40:09.353311 IP 192.168.0.20.55996 > 192.168.0.10.80: Flags [.], ack 245, win 237, options [nop,nop,TS val 4294753714 ecr 262766], length 0
19:40:09.353633 IP 192.168.0.20.55996 > 192.168.0.10.80: Flags [F.], seq 69, ack 245, win 237, options [nop,nop,TS val 4294753715 ecr 262766], length 0
19:40:09.366762 IP 192.168.0.20.55996 > 192.168.0.10.80: Flags [.], ack 246, win 237, options [nop,nop,TS val 4294753717 ecr 262767], length 0

可以從★看到,接收方UDP端口123的包被捕獲到。
19:40:41.333550 IP 192.168.0.20.53503 > 157.7.153.56.123: NTPv4, Client, length 48 
19:40:43.601143 IP 192.168.0.20.52104 > 160.16.75.242.123: NTPv4, Client, length 48

9.2 指定端口范圍的方法(portrange)

使用portrange來指定端口范圍。 假如輸入portrange 10000-10010、就可以捕獲端口10000~10010的包。 man里面并沒有portrange的說明。在網(wǎng)上搜索了以下,偶然發(fā)現(xiàn)了下面的信息。 tcpdumpについて知らない可能性のあるトップ10 Tcpdump usage examples

-------------------------------------------------
1. 執(zhí)行例子(接收方為TCP端口號10000)
-------------------------------------------------
指定端口范圍(訪問接收方TCP端口為10000-10010)。
[root@admin ~]# tcpdump -i eth0 tcp dst portrange 10000-10010 -nn

在admin服務(wù)器上用啟動nc工具。指定Listen端口號為10000。
[root@admin ~]# nc -l 10000

node1服務(wù)器上執(zhí)行nc命令。
[root@SZE-L0149628 ~]# nc admin 10000

可以看到接收方TCP端口號10000(★記號)的包。
[root@admin ~]# tcpdump -i eth0 tcp dst portrange 10000-10010 -nn
20:02:02.412649 IP 192.168.0.20.36590 > 192.168.0.10.★10000: Flags [S], seq 3934696008, win 29200, options [mss 1460,sackOK,TS val 1099483 ecr 0,nop,wscale 7], length 0
20:02:02.413076 IP 192.168.0.20.36590 > 192.168.0.10.★10000: Flags [.], ack 2120320125, win 229, options [nop,nop,TS val 1099483 ecr 1575826], length 0

-------------------------------------------------
2. 執(zhí)行例子(訪問接收方TCP端口10005)
-------------------------------------------------
指定端口范圍(接收方為TCP端口10000-10010),執(zhí)行tcpdump。
[root@admin ~]# tcpdump -i eth0 tcp dst portrange 10000-10010 -nn

啟動nc工具。監(jiān)聽端口為10005。
[root@admin ~]# nc -l 10005

node1服務(wù)器上執(zhí)行nc命令。
[root@SZE-L0149628 ~]# nc admin 10005

可以看到接收方TCP端口號10005(★記號)的包。
[root@admin ~]# tcpdump -i eth0 tcp dst portrange 10000-10010 -nn
20:05:41.231969 IP 192.168.0.20.34196 > 192.168.0.10.★10005: Flags [S], seq 882864997, win 29200, options [mss 1460,sackOK,TS val 1318301 ecr 0,nop,wscale 7], length 0
20:05:41.234158 IP 192.168.0.20.34196 > 192.168.0.10.★10005: Flags [.], ack 1724908027, win 229, options [nop,nop,TS val 1318304 ecr 1794647], length 0


10 以單位時間來做logrotate(-G,-z) 10.1 只指定-G的時候(可以切換,但文件會無限增加)
[root@SZE-L0149628 ~]# id
uid=0(root) gid=0(root) groups=0(root)

創(chuàng)建執(zhí)行tcddump的目錄。
[root@SZE-L0149628 ~]# mkdir tcpdump
[root@SZE-L0149628 ~]# ls -ld tcpdump
drwxr-xr-x 2 root root 6  2月 11 23:29 tcpdump
[root@SZE-L0149628 ~]# chown tcpdump:tcpdump tcpdump
[root@SZE-L0149628 ~]# ls -ld tcpdump
drwxr-xr-x 2 tcpdump tcpdump 6  2月 11 22:41 tcpdump

[root@SZE-L0149628 ~]# cd tcpdump/

每隔10秒鐘捕獲一次數(shù)據(jù),并創(chuàng)建下一個保存數(shù)據(jù)用的文件(-G)。
[root@node1 tcpdump]# tcpdump -i eth0 -G 10 -w tcpdump_%Y%m%d_%H%M%S.cap

可以看到捕獲到的數(shù)據(jù)被保存到文件里了。每10秒鐘生成一個文件。
[root@node1 tcpdump]# ls -l --full-time
total 104
-rw-r--r-- 1 tcpdump tcpdump 18004 2017-02-11 22:45:11.073577507 +0900 tcpdump_20170211_224501.cap
-rw-r--r-- 1 tcpdump tcpdump 21492 2017-02-11 22:45:21.111767063 +0900 tcpdump_20170211_224511.cap
-rw-r--r-- 1 tcpdump tcpdump 24196 2017-02-11 22:45:31.145956545 +0900 tcpdump_20170211_224521.cap
-rw-r--r-- 1 tcpdump tcpdump 20946 2017-02-11 22:45:41.166145762 +0900 tcpdump_20170211_224531.cap
-以下,省略-

10.2 -G + -z (通過shell腳本,將就文件刪除)

用10.1的方法的話,會無限新增文件。 如果要抑制磁盤使用率,需要定期刪除舊文件。

寫一個shell腳本,在捕獲到數(shù)據(jù)并保存之后執(zhí)行。
保持保存的文件不超過4個,也就是保持3個文件。
[root@SZE-L0149628 tcpdump]# cat limit.sh
#!/usr/bin/env bash
file_num=$(ls tcpdump_*|wc -l)

if [ $file_num -gt 3 ]; then
  file_name=$(ls -tr tcpdump_*|head -n 1)
  rm -f $file_name
fi

把腳本所有權(quán)、group改成tcpdump。
[root@SZE-L0149628 tcpdump]# ls -l limit.sh
-rwxr--r-- 1 tcpdump tcpdump 35  2月 12 09:41 limit.sh

啟動tcpdump。每隔10秒刪除一個舊文件。
[root@SZE-L0149628 tcpdump]# tcpdump -i eth0 -G 10 -w tcpdump_%Y%m%d_%H%M%S.cap -z ./limit.sh
-以下,省略-
11 指定文件大小來做logrotate(-C,-z) 11.1 只指定-C(可以切換保存的文件,但文件數(shù)會無限增加)
創(chuàng)建執(zhí)行tcpdump的工作目錄。
[root@SZE-L0149628 ~]# mkdir tcpdump
[root@SZE-L0149628 ~]# chown tcpdump:tcpdump tcpdump
[root@SZE-L0149628 ~]# ls -ld tcpdump
drwxr-xr-x 2 tcpdump tcpdump 6  2月 11 22:41 tcpdump

[root@SZE-L0149628 ~]# cd tcpdump/

以1M為單位捕獲數(shù)據(jù)并保存為新增文件。(-C)。
[root@SZE-L0149628 tcpdump]# tcpdump -i eth0 -C 1 -w tcpdump.cap
-以下,省略-

確認(rèn)保存了數(shù)據(jù)的文件。可以看到文件大小為1M。
[root@SZE-L0149628 tcpdump]# ls -l
total 20560
-rw-r--r-- 1 tcpdump tcpdump 1000895  2月 26 17:33 tcpdump.cap
-rw-r--r-- 1 tcpdump tcpdump 1000753  2月 26 17:33 tcpdump.cap1
-rw-r--r-- 1 tcpdump tcpdump 1000794  2月 26 17:35 tcpdump.cap10
-rw-r--r-- 1 tcpdump tcpdump 1000011  2月 26 17:35 tcpdump.cap11
-rw-r--r-- 1 tcpdump tcpdump 1000072  2月 26 17:35 tcpdump.cap12
-rw-r--r-- 1 tcpdump tcpdump 1001184  2月 26 17:35 tcpdump.cap13
-rw-r--r-- 1 tcpdump tcpdump 1001498  2月 26 17:35 tcpdump.cap14
-rw-r--r-- 1 tcpdump tcpdump 1000372  2月 26 17:35 tcpdump.cap15
-rw-r--r-- 1 tcpdump tcpdump 1001118  2月 26 17:35 tcpdump.cap16
-rw-r--r-- 1 tcpdump tcpdump 1001198  2月 26 17:35 tcpdump.cap17
-rw-r--r-- 1 tcpdump tcpdump 1001276  2月 26 17:35 tcpdump.cap18
-rw-r--r-- 1 tcpdump tcpdump 1000664  2月 26 17:35 tcpdump.cap19
-rw-r--r-- 1 tcpdump tcpdump 1000752  2月 26 17:33 tcpdump.cap2
-rw-r--r-- 1 tcpdump tcpdump  536576  2月 26 17:35 tcpdump.cap20
-rw-r--r-- 1 tcpdump tcpdump 1000146  2月 26 17:34 tcpdump.cap3
-rw-r--r-- 1 tcpdump tcpdump 1000094  2月 26 17:35 tcpdump.cap4
-rw-r--r-- 1 tcpdump tcpdump 1001523  2月 26 17:35 tcpdump.cap5
-rw-r--r-- 1 tcpdump tcpdump 1000928  2月 26 17:35 tcpdump.cap6
-rw-r--r-- 1 tcpdump tcpdump 1001232  2月 26 17:35 tcpdump.cap7
-rw-r--r-- 1 tcpdump tcpdump 1000980  2月 26 17:35 tcpdump.cap8
-rw-r--r-- 1 tcpdump tcpdump 1001383  2月 26 17:35 tcpdump.cap9


如果環(huán)境中可以使用Dockker,一邊執(zhí)行docker pull centos等等,一邊執(zhí)行
tcpdump -i eth0 -C 1 -w tcpdump.cap的話,就能直觀地看到文件被一個個生成出來。

11.2 -C + -z (執(zhí)行shell,將舊文件刪除的方法)

使用11.1的方法的話,文件將會無限增加。 想要抑制磁盤使用量,需要將舊文件定期刪除。

編寫一個腳本,在捕獲并保存數(shù)據(jù)后執(zhí)行。
使文件數(shù)不會超過4個,也就是保持3個數(shù)據(jù)文件。
[root@SZE-L0149628 tcpdump]# cat limit.sh
#!/usr/bin/bash
file_num=$(ls tcpdump.cap*|wc -l)

if [ $file_num -gt 3 ]; then
  file_name=$(ls -tr tcpdump.cap*|head -n 1)
  rm -f $file_name
fi

把腳本的所有者和group改成tcpdump。
[root@SZE-L0149628 tcpdump]# chown  tcpdump:tcpdump limit.sh
[root@SZE-L0149628 tcpdump]# ls -l limit.sh
-rwxr--r-- 1 tcpdump tcpdump 35  2月 12 09:41 limit.sh

啟動tcpdump。
可以觀察到文件大小保持在1M,會生成多個達(dá)到logrotate效果。
保持的文件為最近的3個。
[root@SZE-L0149628 tcpdump]# tcpdump -i eth0 -C 1 -w tcpdump.cap -z ./limit.sh
-以下,省略-

12 切換tcpdump的進程UID(-Z)
----------------------------
1. 通過tcpdump權(quán)限來啟動。
---------------------------
確認(rèn)tcpdump執(zhí)行前的用戶權(quán)限??梢钥吹疆?dāng)前l(fā)ogin賬戶為root。
[root@SZE-L0149628 tcpdump]# id
uid=0(root) gid=0(root) groups=0(root)

執(zhí)行tcpdump。
[root@SZE-L0149628 tcpdump]# tcpdump -i eth0 port 80
-中略-

另外啟動terminal,確認(rèn)tcpdump的UID。
[root@SZE-L0149628 tcpdump]# ps -C tcpdump -o comm,uid,euid
COMMAND           UID  EUID
tcpdump            72    72

并不是UID=0(root),可以看到UID=72(tcpdumpのUID)為tcpdump這個用戶的ID號。
[root@SZE-L0149628 tcpdump]# cat /etc/passwd|grep 72
tcpdump:x:72:72::/:/sbin/nologin

-----------------------
2. 通過root權(quán)限啟動。
-----------------------
通過root權(quán)限啟動tcpdump。
[root@SZE-L0149628 tcpdump]# tcpdump -Z root -i eth0 port 80
-中略-

另啟動terminal查看tcpdump進程的UID。
[root@SZE-L0149628 tcpdump]# ps -C tcpdump -o comm,uid,euid
COMMAND           UID  EUID
tcpdump             0     0

13 限制捕獲的包的大小(-s)

-s128 限制捕獲包的大小為128 byte。 -s0 不限制包的大小。如果是捕獲NFS服務(wù)的數(shù)據(jù)包,則需要指定-s0。

14 和時刻相關(guān)

##14.1 上顯示上一次抓包后經(jīng)過了多久(-ttt)

[root@SZE-L0149628 ~]# tcpdump -ttt -i eth0 port 80
-中略-
00:00:00.000000 IP master-01.local.45591 > SZE-L0149628.http: Flags [S], seq 3130128384, win 29200, options [mss 1460,sackOK,TS val 1308684 ecr 0,nop,wscale 7], length 0
00:00:00.000573 IP SZE-L0149628.http > master-01.local.45591: Flags [S.], seq 2731073810, ack 3130128385, win 28960, options [mss 1460,sackOK,TS val 8901 ecr 1308684,nop,wscale 7], length 0
00:00:00.000590 IP master-01.local.45591 > SZE-L0149628.http: Flags [.], ack 1, win 229, options [nop,nop,TS val 1308687 ecr 8901], length 0
-以下,省略-

##14.2 用易讀的格式表示時刻(-tttt)

[root@SZE-L0149628 tcpdump]# tcpdump -tttt -i eth0 port 80
-中略-
2017-02-11 23:48:24.601156 IP master-01.local.37570 > SZE-L0149628.http: Flags [S], seq 1753606276, win 29200, options [mss 1460,sackOK,TS val 14920793 ecr 0,nop,wscale 7], length 0
2017-02-11 23:48:24.601327 IP SZE-L0149628.http > master-01.local.37570: Flags [S.], seq 2174856607, ack 1753606277, win 28960, options [mss 1460,sackOK,TS val 13999755 ecr 14920793,nop,wscale 7], length 0
2017-02-11 23:48:24.630309 IP master-01.local.37570 > SZE-L0149628.http: Flags [.], ack 1, win 229, options [nop,nop,TS val 14920796 ecr 13999755], length 0
-以下,省略-
14.3 表示從最初抓包之后經(jīng)過的時間(-ttttt)
[root@SZE-L0149628 tcpdump]# tcpdump -ttttt -i eth0 port 80
-中略-
00:00:00.000000 IP master-01.local.37609 > SZE-L0149628.http: Flags [S], seq 1814350362, win 29200, options [mss 1460,sackOK,TS val 15104880 ecr 0,nop,wscale 7], length 0
00:00:00.000130 IP SZE-L0149628.http > master-01.local.37609: Flags [S.], seq 3384514235, ack 1814350363, win 28960, options [mss 1460,sackOK,TS val 14183842 ecr 15104880,nop,wscale 7], length 0
00:00:00.000503 IP master-01.local.37609 > SZE-L0149628.http: Flags [.], ack 1, win 229, options [nop,nop,TS val 15104880 ecr 14183842], length 0
00:00:00.000827 IP master-01.local.37609 > SZE-L0149628.http: Flags [P.], seq 1:70, ack 1, win 229, options [nop,nop,TS val 15104881 ecr 14183842], length 69
00:00:00.000910 IP SZE-L0149628.http > master-01.local.37609: Flags [.], ack 70, win 227, options [nop,nop,TS val 14183843 ecr 15104881], length 0
00:00:00.001818 IP SZE-L0149628.http > master-01.local.37609: Flags [.], seq 1:4345, ack 70, win 227, options [nop,nop,TS val 14183844 ecr 15104881], length 4344
00:00:00.002032 IP SZE-L0149628.http > master-01.local.37609: Flags [P.], seq 4345:5150, ack 70, win 227, options [nop,nop,TS val 14183844 ecr 15104881], length 805
00:00:00.002447 IP master-01.local.37609 > SZE-L0149628.http: Flags [.], ack 4345, win 296, options [nop,nop,TS val 15104882 ecr 14183844], length 0
00:00:00.002521 IP master-01.local.37609 > SZE-L0149628.http: Flags [.], ack 5150, win 319, options [nop,nop,TS val 15104882 ecr 14183844], length 0
00:00:00.003245 IP master-01.local.37609 > SZE-L0149628.http: Flags [F.], seq 70, ack 5150, win 319, options [nop,nop,TS val 15104883 ecr 14183844], length 0
00:00:00.003504 IP SZE-L0149628.http > master-01.local.37609: Flags [F.], seq 5150, ack 71, win 227, options [nop,nop,TS val 14183845 ecr 15104883], length 0
00:00:00.004282 IP master-01.local.37609 > SZE-L0149628.http: Flags [.], ack 5151, win 319, options [nop,nop,TS val 15104884 ecr 14183845], length 0
00:00:12.419958 IP master-01.local.37610 > SZE-L0149628.http: Flags [S], seq 3751257265, win 29200, options [mss 1460,sackOK,TS val 15117299 ecr 0,nop,wscale 7], length 0
00:00:12.420080 IP SZE-L0149628.http > master-01.local.37610: Flags [S.], seq 2826492114, ack 3751257266, win 28960, options [mss 1460,sackOK,TS val 14196262 ecr 15117299,nop,wscale 7], length 0
00:00:12.420785 IP master-01.local.37610 > SZE-L0149628.http: Flags [.], ack 1, win 229, options [nop,nop,TS val 15117300 ecr 14196262], length 0
00:00:12.420819 IP master-01.local.37610 > SZE-L0149628.http: Flags [P.], seq 1:70, ack 1, win 229, options [nop,nop,TS val 15117300 ecr 14196262], length 69
00:00:12.420867 IP SZE-L0149628.http > master-01.local.37610: Flags [.], ack 70, win 227, options [nop,nop,TS val 14196263 ecr 15117300], length 0
00:00:12.421848 IP SZE-L0149628.http > master-01.local.37610: Flags [.], seq 1:4345, ack 70, win 227, options [nop,nop,TS val 14196263 ecr 15117300], length 4344
00:00:12.422183 IP SZE-L0149628.http > master-01.local.37610: Flags [P.], seq 4345:5150, ack 70, win 227, options [nop,nop,TS val 14196264 ecr 15117300], length 805
00:00:12.422851 IP master-01.local.37610 > SZE-L0149628.http: Flags [.], ack 2897, win 274, options [nop,nop,TS val 15117302 ecr 14196263], length 0
00:00:12.422900 IP master-01.local.37610 > SZE-L0149628.http: Flags [.], ack 4345, win 296, options [nop,nop,TS val 15117302 ecr 14196263], length 0
00:00:12.422911 IP master-01.local.37610 > SZE-L0149628.http: Flags [.], ack 5150, win 319, options [nop,nop,TS val 15117302 ecr 14196264], length 0
00:00:12.423754 IP master-01.local.37610 > SZE-L0149628.http: Flags [F.], seq 70, ack 5150, win 319, options [nop,nop,TS val 15117303 ecr 14196264], length 0
00:00:12.842416 IP SZE-L0149628.http > master-01.local.37610: Flags [F.], seq 5150, ack 71, win 227, options [nop,nop,TS val 14196483 ecr 15117303], length 0
00:00:12.843931 IP master-01.local.37610 > SZE-L0149628.http: Flags [F.], seq 70, ack 5150, win 319, options [nop,nop,TS val 15117532 ecr 14196264], length 0
00:00:12.843997 IP SZE-L0149628.http > master-01.local.37610: Flags [.], ack 71, win 227, options [nop,nop,TS val 14196686 ecr 15117532,nop,nop,sack 1 {70:71}], length 0
00:00:12.846918 IP master-01.local.37610 > SZE-L0149628.http: Flags [.], ack 5151, win 319, options [nop,nop,TS val 15117725 ecr 14196483], length 0
-以下,省略-

15 混雜模式(-p)
從master往router執(zhí)行ping的時候,在node1上抓包(執(zhí)行tcpdump)。
確認(rèn)下加上-p選項,和不加的區(qū)別。

       master                        node1
     192.168.0.10                 192.168.0.20
         |                             |
         |  ping                       |  tcpdump実行
         |   |                         |
         |   |                         |
         |   |                         |
    +--------|----------------------------------+
    |        |     VMware Workstation           |
    +--------|----------------------------------+
             |           |
             |           |
             V           |
                     192.168.0.1
                       Router


----------------------------------------
1. 不帶-p的情況下(啟用混雜模式時)
----------------------------------------
[root@SZE-L0149625 ~]# ping -c 1 192.168.0.1

另啟一個終端,執(zhí)行tcpdump。可以看到往Route發(fā)送的IMCP包。
也就是說,可以捕獲到目標(biāo)并非為自己的包。
[root@SZE-L0149628 ~]# tcpdump -i eth0 icmp
20:15:07.404762 IP master-01.local > 192.168.0.1: ICMP echo request, id 2395, seq 1, length 64
20:15:07.408709 IP 192.168.0.1 > master-01.local: ICMP echo reply, id 2395, seq 1, length 64

-----------------
2. 帶-p參數(shù)的情況
-----------------
[root@SZE-L0149625 ~]# ping -c 1 192.168.0.1

另起終端,執(zhí)行tcpdump。
因為沒有啟用混雜模式,發(fā)給別人的包是抓不到的。
root@SZE-L0149628 ~]# tcpdump -p -i eth0 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
到這里就結(jié)束了。

16 只捕獲接收/發(fā)送的數(shù)據(jù)包(-P) 16.1 只捕獲發(fā)送的數(shù)據(jù)包(-P out)
執(zhí)行ping。
[[email protected] ~]# ping 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=255 time=1.30 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=255 time=2.08 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=255 time=1.38 ms
64 bytes from 192.168.0.1: icmp_seq=4 ttl=255 time=1.28 ms
64 bytes from 192.168.0.1: icmp_seq=5 ttl=255 time=2.65 ms
-以下,省略-

另啟終端。可以看到只捕獲到ICMP echo request(★記號)。
[[email protected] ~]# tcpdump -i eth0 -P out icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
19:49:30.824851 IP master-01.local > gateway: ★ICMP echo request, id 8383, seq 1, length 64
19:49:31.826870 IP master-01.local > gateway: ★ICMP echo request, id 8383, seq 2, length 64
19:49:32.829000 IP master-01.local > gateway: ★ICMP echo request, id 8383, seq 3, length 64
19:49:33.831066 IP master-01.local > gateway: ★ICMP echo request, id 8383, seq 4, length 64
19:49:34.833142 IP master-01.local > gateway: ★ICMP echo request, id 8383, seq 5, length 64

16.2 只捕獲接收的包(-P in)
執(zhí)行ping。
[[email protected] ~]# ping 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=255 time=1.60 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=255 time=1.45 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=255 time=0.957 ms
64 bytes from 192.168.0.1: icmp_seq=4 ttl=255 time=1.24 ms

另開終端執(zhí)行tcpdump??梢钥吹街徊东@到ICMP echo reply(★記號)。
[[email protected] ~]# tcpdump -i eth0 -P in icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
19:52:01.518368 IP gateway > master-01.local: ★ICMP echo reply, id 8389, seq 1, length 64
19:52:02.523845 IP gateway > master-01.local: ★ICMP echo reply, id 8389, seq 2, length 64
19:52:03.533297 IP gateway > master-01.local: ★ICMP echo reply, id 8389, seq 3, length 64
19:52:04.536053 IP gateway > master-01.local: ★ICMP echo reply, id 8389, seq 4, length 64
19:52:05.545274 IP gateway > master-01.local: ★ICMP echo reply, id 8389, seq 5, length 64

17 用ASCII碼表示包的內(nèi)容(-x,-xx) 17.1 表示包含IP header的包的內(nèi)容的方法(-x)
在server側(cè)監(jiān)聽11111端口。
[root@server ~]# nc -l 11111

另開終端,執(zhí)行tcpdump。
[root@server ~]# tcpdump -i eth0 port 11111 -X

從客戶端向服務(wù)器建立TCP連接,發(fā)送數(shù)據(jù)。以下例子中,一共發(fā)送了111...555的50個byte,以及換行符(0x0a)合計51byte。
[root@client ~]# nc server 11111
11111111112222222222333333333344444444445555555555

確認(rèn)執(zhí)行結(jié)果??梢源_認(rèn)到包括IP header,發(fā)送的數(shù)據(jù)內(nèi)容。
[root@server ~]# tcpdump -i eth0 port 11111 -X

17.2 表示包含了ethernet header的數(shù)據(jù)包的內(nèi)容(-xx)

在server端監(jiān)聽11111端口。
[root@server ~]# nc -l 11111

另開一個終端,執(zhí)行tcpdump。
[root@server ~]# tcpdump -i eth0 port 11111 -XX

從client端向server建立TCP連接,發(fā)送數(shù)據(jù)。
以下例子中,發(fā)送了111...555的50個byte以及換行符(0x0a)一共51個byte。
[root@client ~]# nc server 11111
11111111112222222222333333333344444444445555555555

確認(rèn)執(zhí)行結(jié)果??梢源_認(rèn)到包含ethernet header的發(fā)送數(shù)據(jù)內(nèi)容。
[root@server ~]# tcpdump -i eth0 port 11111 -XX

18 讀取保存的pcap文件的方法(-r) 18.1 只采集SYN包的方法

[root@admin tcpdump]# tcpdump -r test.cap "(tcp[tcpflags] & tcp-syn)" != 0 and "(tcp[tcpflags] & tcp-ack)" ==0
reading from file test.cap, link-type EN10MB (Ethernet)
21:23:03.301427 IP admin.37958 > ftp.jaist.ac.jp.http: Flags [S], seq 2552724747, win 29200, options [mss 1460,sackOK,TS val 2642270 ecr 0,nop,wscale 7], length 0
18.2 只采集SYN,SYN+ACK包的方法
[root@admin tcpdump]# tcpdump -r test.cap "(tcp[tcpflags] & tcp-syn)" != 0
reading from file test.cap, link-type EN10MB (Ethernet)
21:23:03.301427 IP admin.37958 > ftp.jaist.ac.jp.http: Flags [S], seq 2552724747, win 29200, options [mss 1460,sackOK,TS val 2642270 ecr 0,nop,wscale 7], length 0
21:23:03.327373 IP ftp.jaist.ac.jp.http > admin.37958: Flags [S.], seq 2234169755, ack 2552724748, win 32851, options [sackOK,TS val 606933891 ecr 2642270,mss 1460,nop,wscale 4], length 0
19 捕獲經(jīng)過Netlink的流量包 19.1 準(zhǔn)備抓包工具軟件
加載kernel的nlmon模塊。
[[email protected] ~]# modprobe nlmon
[[email protected] ~]# lsmod |grep nlmon
nlmon                  12924  0

追加nlmon類型的設(shè)備。
[[email protected] ~]# ip link add nlmon0 type nlmon
[[email protected] ~]# ip link set nlmon0 up
[[email protected] ~]# ip link show dev nlmon0
6: nlmon0:  mtu 3776 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
    link/[824]

執(zhí)行tcpdump。
另外,使用NETLINK類型的情況下,并沒有支持把數(shù)據(jù)輸出到標(biāo)準(zhǔn)輸出。需要使用-w將數(shù)據(jù)保存為文件。
[[email protected] ~]# tcpdump -i nlmon0 -s0 -w test.pcap
tcpdump: listening on nlmon0, link-type NETLINK (Linux netlink), capture size 65535 bytes
13 packets captured
14 packets received by filter
0 packets dropped by kernel

為了將數(shù)據(jù)包傳輸?shù)絅ETLINK上,另開一個終端,執(zhí)行以下命令。
[[email protected] ~]# ip a
[[email protected] ~]# ip r
[[email protected] ~]# ip n

19.2 查閱抓包軟件的方法

使用Wireshark來查閱捕獲到的數(shù)據(jù)。 像以下的方式,可以將傳輸?shù)絅etlink的數(shù)據(jù)包表示出來。

19.3 環(huán)境清理

刪除測試用的設(shè)備,以及卸載模塊。

刪除設(shè)備(nlmon0)。
[[email protected] ~]# ip link delete nlmon0
[[email protected] ~]# ip link
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0:  mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 00:0c:29:18:5c:90 brd ff:ff:ff:ff:ff:ff
3: cbr0:  mtu 1430 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1000
    link/ether 46:40:75:d9:7d:d5 brd ff:ff:ff:ff:ff:ff

刪除nlmon模塊。
[[email protected] ~]# rmmod nlmon
[[email protected] ~]# lsmod |grep nlmon
[[email protected] ~]#
20 將采集到的tcpdump數(shù)據(jù)表示出來的方法(-r)
捕獲(-w)測試用的tcpdump。
[root@SZE-L0149628 ~]# tcpdump -i eth0 port 80 -w http.cap
-以下,省略-

確認(rèn)采集下來的tcpdump。
[root@SZE-L0149628 ~]# ls -l http.cap
-rw-r--r-- 1 tcpdump tcpdump 38313  2月 11 21:48 http.cap
[root@SZE-L0149628 ~]#

表示(-r)捕獲到的tcpdump。
[root@SZE-L0149628 ~]# tcpdump -r http.cap
-中略-
21:47:39.816741 IP master-01.local.36345 > SZE-L0149628.http: Flags [S], seq 1437916452, win 29200, options [mss 1460,sackOK,TS val 7676049 ecr 0,nop,wscale 7], length 0
21:47:39.816879 IP SZE-L0149628.http > master-01.local.36345: Flags [S.], seq 296354756, ack 1437916453, win 28960, options [mss 1460,sackOK,TS val 6754970 ecr 7676049,nop,wscale 7], length 0
21:47:39.818131 IP master-01.local.36345 > SZE-L0149628.http: Flags [.], ack 1, win 229, options [nop,nop,TS val 7676050 ecr 6754970], length 0
21:47:39.818180 IP master-01.local.36345 > SZE-L0149628.http: Flags [P.], seq 1:70, ack 1, win 229, options [nop,nop,TS val 7676051 ecr 6754970], length 69
21:47:39.818234 IP SZE-L0149628.http > master-01.local.36345: Flags [.], ack 70, win 227, options [nop,nop,TS val 6754972 ecr 7676051], length 0
21:47:39.818968 IP SZE-L0149628.http > master-01.local.36345: Flags [.], seq 1:4345, ack 70, win 227, options [nop,nop,TS val 6754972 ecr 7676051], length 4344
21:47:39.819210 IP SZE-L0149628.http > master-01.local.36345: Flags [P.], seq 4345:5150, ack 70, win 227, options [nop,nop,TS val 6754973 ecr 7676051], length 805
21:47:39.820037 IP master-01.local.36345 > SZE-L0149628.http: Flags [.], ack 4345, win 296, options [nop,nop,TS val 7676052 ecr 6754972], length 0
21:47:39.820077 IP master-01.local.36345 > SZE-L0149628.http: Flags [.], ack 5150, win 319, options [nop,nop,TS val 7676053 ecr 6754973], length 0
21:47:39.822032 IP master-01.local.36345 > SZE-L0149628.http: Flags [F.], seq 70, ack 5150, win 319, options [nop,nop,TS val 7676053 ecr 6754973], length 0
21:47:39.822277 IP SZE-L0149628.http > master-01.local.36345: Flags [F.], seq 5150, ack 71, win 227, options [nop,nop,TS val 6754976 ecr 7676053], length 0
21:47:39.826081 IP master-01.local.36345 > SZE-L0149628.http: Flags [.], ack 5151, win 319, options [nop,nop,TS val 7676055 ecr 6754976], length 0
21:47:43.474723 IP master-01.local.36346 > SZE-L0149628.http: Flags [S], seq 3975369367, win 29200, options [mss 1460,sackOK,TS val 7679705 ecr 0,nop,wscale 7], length 0
21:47:43.474894 IP SZE-L0149628.http > master-01.local.36346: Flags [S.], seq 3828837720, ack 3975369368, win 28960, options [mss 1460,sackOK,TS val 6758628 ecr 7679705,nop,wscale 7], length 0
-以下,省略-

----------------------------
2. 使用sed篩選時間
----------------------------
[root@SZE-L0149628 ~]# tcpdump -r http.cap |sed -n "/21:47:39.816741/,/21:47:39.826081/p"
-中略-
21:47:39.816741 IP master-01.local.36345 > SZE-L0149628.http: Flags [S], seq 1437916452, win 29200, options [mss 1460,sackOK,TS val 7676049 ecr 0,nop,wscale 7], length 0
21:47:39.816879 IP SZE-L0149628.http > master-01.local.36345: Flags [S.], seq 296354756, ack 1437916453, win 28960, options [mss 1460,sackOK,TS val 6754970 ecr 7676049,nop,wscale 7], length 0
21:47:39.818131 IP master-01.local.36345 > SZE-L0149628.http: Flags [.], ack 1, win 229, options [nop,nop,TS val 7676050 ecr 6754970], length 0
21:47:39.818180 IP master-01.local.36345 > SZE-L0149628.http: Flags [P.], seq 1:70, ack 1, win 229, options [nop,nop,TS val 7676051 ecr 6754970], length 69
21:47:39.818234 IP SZE-L0149628.http > master-01.local.36345: Flags [.], ack 70, win 227, options [nop,nop,TS val 6754972 ecr 7676051], length 0
21:47:39.818968 IP SZE-L0149628.http > master-01.local.36345: Flags [.], seq 1:4345, ack 70, win 227, options [nop,nop,TS val 6754972 ecr 7676051], length 4344
21:47:39.819210 IP SZE-L0149628.http > master-01.local.36345: Flags [P.], seq 4345:5150, ack 70, win 227, options [nop,nop,TS val 6754973 ecr 7676051], length 805
21:47:39.820037 IP master-01.local.36345 > SZE-L0149628.http: Flags [.], ack 4345, win 296, options [nop,nop,TS val 7676052 ecr 6754972], length 0
21:47:39.820077 IP master-01.local.36345 > SZE-L0149628.http: Flags [.], ack 5150, win 319, options [nop,nop,TS val 7676053 ecr 6754973], length 0
21:47:39.822032 IP master-01.local.36345 > SZE-L0149628.http: Flags [F.], seq 70, ack 5150, win 319, options [nop,nop,TS val 7676053 ecr 6754973], length 0
21:47:39.822277 IP SZE-L0149628.http > master-01.local.36345: Flags [F.], seq 5150, ack 71, win 227, options [nop,nop,TS val 6754976 ecr 7676053], length 0
21:47:39.826081 IP master-01.local.36345 > SZE-L0149628.http: Flags [.], ack 5151, win 319, options [nop,nop,TS val 7676055 ecr 6754976], length 0
-以下,省略-
21 NFLOG的使用方法

iptables中有個叫NFLOG的target。 以下展示如何捕獲處于這個target的交互的數(shù)據(jù)包。

21.1 實驗結(jié)果
事前準(zhǔn)備。接收方TCP端口11111,將會往NFLOG這個target發(fā)送。
[[email protected] ~]# iptables -I INPUT -p tcp --dport 11111 -j NFLOG

確認(rèn)設(shè)定。
[[email protected] ~]# iptables -nvL INPUT --line-numbers
Chain INPUT (policy ACCEPT 44 packets, 4256 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 NFLOG      tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:11111

另開終端。為方便稱之為"terminal2"。監(jiān)聽端口11111。
[[email protected] ~]# nc -kl 11111 &
[1] 1982

在terminal2執(zhí)行tcpdump。將網(wǎng)卡指定為nflog。
[[email protected] ~]# tcpdump -i nflog -nn
-以下,省略-

另外再開一個終端。對11111端口建立TCP連接.
[[email protected] ~]# nc master-01.local 11111

確認(rèn)terminal2的標(biāo)準(zhǔn)輸出。
[[email protected] ~]# tcpdump -i nflog -nn
tcpdump: WARNING: SIOCGIFADDR: nflog: No such device
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on nflog, link-type NFLOG (Linux netfilter log messages), capture size 65535 bytes
20:55:35.574281 IP 192.168.0.10.49970 > 192.168.0.10.11111: Flags [S], seq 426419978, win 43690, options [mss 65495,sackOK,TS val 1711742 ecr 0,nop,wscale 7], length 0
20:55:35.574608 IP 192.168.0.10.49970 > 192.168.0.10.11111: Flags [.], ack 381759371, win 342, options [nop,nop,TS val 1711742 ecr 1711742], length 0

21.2 疑問

可以確認(rèn)到nflog這個interface有數(shù)據(jù)包傳輸。但是3 way hand shake的第二個包捕獲不到。這是為什么呢???

  |---- SYN ---->|
  |<-- SYN+ACK --| <===這個包在tcpdump執(zhí)行結(jié)果中沒有顯示。。。為什么呢");

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/7209.html

相關(guān)文章

  • 軟件測試崗位工作,到底可以做多久?

    摘要:說軟件測試有可能被替代或者被淘汰的人,他一定沒有正確了解軟件測試。軟件測試最主要的優(yōu)勢是隨著經(jīng)驗的增長,能夠發(fā)現(xiàn)更多軟件的問題,保證測試覆蓋率,但是工具本身并無想象力。 ...

    longshengwang 評論0 收藏0
  • Subsets 系列 Leetcode解題記錄

    摘要:寫這個系列是因為紀(jì)念一下去年的今天,就是年的月號,刷題第一天,今天是一周年紀(jì)念日。排除,就是返回一空的。復(fù)雜度分析算法課講過,這個復(fù)雜度是指數(shù)次,能實現(xiàn)出來就行了,沒法優(yōu)化。復(fù)雜度分析不分析了,反正指數(shù)次。 Subsets 寫這個系列是因為紀(jì)念一下去年的今天,就是2015年的9月14號,刷題第一天,今天是一周年紀(jì)念日。當(dāng)時只敢做easy還得抄答案的我想啥時候能做上medium啊,事到如...

    gityuan 評論0 收藏0
  • ??不一樣測試之旅:醫(yī)療行業(yè)軟件測試有什么不一樣???

    一直在網(wǎng)站上學(xué)習(xí)別人的測試之路,現(xiàn)在也想分享一下自己的經(jīng)歷。 結(jié)緣測試 和大家不同的地方在于,作為一名生物醫(yī)學(xué)工程專業(yè)畢業(yè)生,我都是在醫(yī)療行業(yè)打轉(zhuǎn)。 我的軟件測試之旅分為兩段,第一段是一份實習(xí),從2019年9月到2020年1月,第二段是畢業(yè)后的第一份工作,從2020年4月到今天。 實習(xí)之路 雖然從時間上來看,我的軟件測試之旅接近兩年,尤其是第一份實習(xí),雖然時間跨度有四個月,但因為當(dāng)時學(xué)校導(dǎo)師給的壓...

    CarterLi 評論0 收藏0
  • 漫談標(biāo)準(zhǔn)中CSS浮動令人困惑部分

    摘要:轉(zhuǎn)自漫談標(biāo)準(zhǔn)中浮動令人困惑的部分時間追溯到年前,那時剛出道,寫了一篇定位機制之一普通流,轉(zhuǎn)眼年醬油人生,說好的浮動和絕對定位的篇幅也一拖年。所以標(biāo)準(zhǔn)這兩段是因果關(guān)系,只是額外表明上述定義造成的一種特殊的結(jié)果。 轉(zhuǎn)自漫談標(biāo)準(zhǔn)中CSS浮動令人困惑的部分 時間追溯到4年前,那時剛出道,寫了一篇CSS定位機制之一:普通流,轉(zhuǎn)眼4年醬油人生,說好的浮動和絕對定位的篇幅也一拖4年。多少是因為對于...

    lentrue 評論0 收藏0
  • “我,24歲,年薪20萬”:選對了行業(yè)究竟多重要?

    摘要:最難的是北京早晚高峰的地鐵上,每天來回通勤要花費個小時,因為這點工資不敢住市區(qū),只能在很遠(yuǎn)的郊區(qū)租一個相對便宜的房子。工作的第一年,我大部分時間都穿梭在北京地鐵的角落,每天都想要辭職。 ...

    neroneroffy 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<