跳转至主要内容

许多时候,解决网络通信问题的唯一途径——或至少最快捷的方式——就是收集通信跟踪记录并发送给专家进行分析。 当专家不属于本组织时,这可能引发安全问题,因为追踪记录将包含应用程序数据。但通常关键在于以太网、IP及TCP/UDP/ICMP协议头部,而非应用数据。若属此类情况,可选择不收集数据或在收集后剔除数据。

使用 packet_monitor 时,可通过以下命令收集所有报头信息但不包含任何数据:

packet_monitor -interface #接口名 -numeric -time_stamp -verbose -pkt_hdr     

其中INTERFACE是IP接口的设备名称,该名称由“ifconfig -all”命令显示。跟踪结果将如下所示:

方向                                                 icmp类型
+        tcp
时:分:秒.ttt 方向   长度 协议 源地址             目标地址         源端口  数据包类型
11:40:21.234 发送 以太网 目标 00:23:54:52:18:6e  源 00:00:a8:43:52:22 类型 0800
+(IP)
IP   版本/头部 45, 任务标记 0, 长度 78, 标识符 2212, 旗标/分片 0, 生存时间 3c,  协议 6
校验和 788b, 源地址 a4984d80, 目标地址 a4984d32
TCP 数据包,源地址 164.152.77.128.22 发往 164.152.77.50.6991
序列号 1332611210,确认号 3416994988,窗口 8192,80 数据字节,标志位 推送确认
+.
X/Off 05, Flags 18, Cksum c3aa,  Urg-> 0000

11:40:21.235 发送以太网 目标 00:23:54:52:18:6e  源 00:00:a8:43:52:22 类型 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len   a8, ID 2213, Flg/Frg    0, TTL 3c,  Prtl  6
Cksum  785a, Src a4984d80, Dst a4984d32
TCP 数据包,源地址 164.152.77.128.22 发往 164.152.77.50.6991
序列号 1332611290,确认号 3416994988,窗口 8192,128 数据字节,标志位推送确认
+k.
X/Off 05, Flags 18, Cksum ce9f,  Urg-> 0000

11:40:21.236 接收以太网 目标 00:00:a8:43:52:22  源 00:23:54:52:18:6e 类型 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len   28, ID 3032, Flg/Frg 4000, TTL 80,  Prtl  6
Cksum  e6ba, Src a4984d32, Dst a4984d80
TCP 数据包 源地址 164.152.77.50.6991 发往 164.152.77.128.22
序列号 3416994988, 确认号 1332611418, 窗口 16176, 0 数据字节, 标志位 Ack.
X/Off 05, Flags 10, Cksum 183c,  Urg-> 0000

11:40:21.952 发送以太网 目标 00:23:54:52:18:6e  源 00:00:a8:43:52:22 类型 0800
+(IP)
+(IP)
IP   Ver/HL 45, ToS  0, Len   a8, ID 2214, Flg/Frg    0, TTL 3c,  Prtl  6
Cksum  7859, Src a4984d80, Dst a4984d32
TCP 数据包:源地址 164.152.77.128.22 发往 164.152.77.50.6991
序列号 1332611418,确认号 3416994988,窗口 8192,128 数据字节,标志位推送确认
+k.
X/Off 05, Flags 18, Cksum 59a9,  Urg-> 0000

11:40:21.953 发送以太网目标 00:23:54:52:18:6e  源 00:00:a8:43:52:22 类型 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len   98, ID 2215, Flg/Frg    0, TTL 3c,  Prtl  6
Cksum  7868, Src a4984d80, Dst a4984d32
TCP 来自 164.152.77.128.22 发往 164.152.77.50.6991
序列号 1332611546, 确认号 3416994988, 窗口 8192, 112 数据字节, 标志位 推送确认
+k.
X/Off 05, Flags 18, Cksum 2b4e,  Urg-> 0000

这种方法的问题在于,有时问题最终被发现与应用程序相关,此时就需要应用程序数据。若最初未收集完整跟踪记录,就必须重现问题或等待其再次发生。 更便捷的做法是在初始发送跟踪数据分析时,通过添加“-hex_dump”和“-length 1500”参数捕获完整跟踪记录,随后从副本中剔除应用程序数据。下图展示了相关命令和跟踪记录,但为节省篇幅,我已编辑删除大部分应用程序数据。

packet_monitor -interface #sdlmux.m16.11-3 -numeric -time_stamp -verbose -pkt_hd
+r -hex_dump -length 1500
dir                                                 icmp type
+        tcp
hh:mm:ss.ttt dir   len proto source             destination         src port  ds
+t port  type
13:52:04.672 Xmit Ether Dst 00:23:54:52:18:6e  Src 00:00:a8:43:52:22 Type 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len  5dc, ID 9eaa, Flg/Frg    0, TTL 3c,  Prtl  6
Cksum  f68e, Src a4984d80, Dst a4984d32
TCP from 164.152.77.128.22 to 164.152.77.50.6991
seq  1335114362, ack 3417069804, window 65535, 1460 data bytes, flags Push A
+ck.
X/Off 05, Flags 18, Cksum 8d33,  Urg-> 0000
offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
0      22 cd 33 93 25 7b 85 39   7 c4 3b 7e c9 a9 d5 d9  "M3>%{>9 <D;~I)UY
10     63 25 a7 80  6 d7 4f c9  e7 7a 91 1e 4b e7 b7 a5  c%'><WOI gz><Kg7%
20     4f 4c bf 1d 2a 3d 72 53  99 41 b8 c4 26 24 31 4d  OL?<*=rS >A8D&$1M
. . .
590    98 bc af 74 d1 71 88 3f  3d 90 22 d3 91 86 92 4e  ></tQq>? =>"S>>>N
5a0    da cc d8  7 18 e7 9e 55  c8 f1 af d3 30  0 35  4  ZLX<<g>U Hq/S0 5<
5b0    ac e8 f0 82                                       ,hp>

13:52:04.692 Rcvd Ether Dst 00:00:a8:43:52:22  Src 00:23:54:52:18:6e Type 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len   28, ID 9324, Flg/Frg 4000, TTL 80,  Prtl  6
Cksum  83c8, Src a4984d32, Dst a4984d80
TCP from 164.152.77.50.6991 to 164.152.77.128.22
seq  3417069804, ack 1335120266, window 16384, 0 data bytes, flags Ack.
X/Off 05, Flags 10, Cksum aad4,  Urg-> 0000
No tcp data.

13:52:04.692 Xmit Ether Dst 00:23:54:52:18:6e  Src 00:00:a8:43:52:22 Type 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len  5dc, ID 9eab, Flg/Frg    0, TTL 3c,  Prtl  6
Cksum  f68d, Src a4984d80, Dst a4984d32
TCP from 164.152.77.128.22 to 164.152.77.50.6991
seq  1335120266, ack 3417069804, window 65535, 1460 data bytes, flags Ack.
X/Off 05, Flags 10, Cksum 2626,  Urg-> 0000
offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
0      a0 95 bb 79 99 93 c9 52  ac 11 69 fd d5 a9 39 b8   >;y>>IR ,<i}U)98
10     fd  4 2e ec 3e eb 87 9d  3f 96 a9 91 2e b2 c8 91  }<.l>k>> ?>)>.2H>
20     6a b3 7e 9f cc 79 6f e2  9f  5 c6 a0 e4 95 57 9c  j3~>Lyob ><F d>W>
. . .
590    88 d8 2e b6 54 c1 25 95  c4 38 d9  0 55 36 32 58  >X.6TA%> D8Y U62X
5a0    2d ba 81 2c e5 51 8a 3b  ef cd 98 29 a1 c2 82 24  -:>,eQ>; oM>)!B>$
5b0    90 33 6e e8                                       >3nh

13:52:04.694 Xmit Ether Dst 00:23:54:52:18:6e  Src 00:00:a8:43:52:22 Type 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len  3a4, ID 9eac, Flg/Frg    0, TTL 3c,  Prtl  6
Cksum  f8c4, Src a4984d80, Dst a4984d32
TCP from 164.152.77.128.22 to 164.152.77.50.6991
seq  1335121726, ack 3417069804, window 65535, 892 data bytes, flags Push Ac
+k.
X/Off 05, Flags 18, Cksum d4c2,  Urg-> 0000
offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
0      23 2a 5a 1a e3 34 e7 b4  62 d7 ee 55 7c 38 f7  a  #*Z<c4g4 bWnU|8w<
10     cb b6 95  4  6 d8 b8  e  7d 88 68 a7 24 7a ed bd  K6><<X8< }>h'$zm=
20     57 ce 14 43 6c 17 56 5a  25 7d 9b f5 88 d9 97 29  WN<Cl<VZ %}>u>Y>)
. . .
350     8 a3 86  6 24 bc cc b9  d6 3f af ab  f bd 38 ca  <#><$<L9 V?/+<=8J
360    da b5  6 8a bf 2b 49 90  a2 d4 27 f5 79 a1  9 1a  Z5<>?+I> "T'uy!<<
370    5c 87 6b ae f0 d2 e8 45  14 b3 12 b5              >k.pRhE <3<5

13:52:04.695 Rcvd Ether Dst 00:00:a8:43:52:22  Src 00:23:54:52:18:6e Type 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len   58, ID 9325, Flg/Frg 4000, TTL 80,  Prtl  6
Cksum  8397, Src a4984d32, Dst a4984d80
TCP from 164.152.77.50.6991 to 164.152.77.128.22
seq  3417069804, ack 1335120266, window 16384, 48 data bytes, flags Push Ack
+.
X/Off 05, Flags 18, Cksum dde1,  Urg-> 0000
offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
0     84 2c 64 69 88 5d c5 b2  bc 6c ca 4e af 15 be 2e  >,di>]E2 <lJN/<>.
10    3f 87 93 79 a0 b7 5d d5  3c 35 7f 2d db 7e be 44  ?>>y 7]U <5<-[~>D
20    a8 24 6d 96 6f f0 79 c1  d6 9c c3 be 64 4b 7d 4c  ($m>opyA V>C>dK}L

从跟踪记录中剥离应用程序数据有多种方法。您可以手动编辑跟踪记录;对于短记录这或许可行,但对于长记录则难以实现。我此前发布过两个可用的Perl脚本。第一个pm21line.pl旨在将所有头信息置于一行并剥离应用程序数据。该脚本使用IO指示符,因此必须在bash环境下运行。

bash
bash-2.05$ perl pm21line.pl < full_trace.out > 1line_trace.out
bash-2.05$ exit
exit
ready  17:21:00

d 1line_trace.out%phx_vos#m16_mas>SysAdmin>Noah_Davids>1line_trace.out  10-10-1
+0 17:21:08 mst

13:52:04.672 Xmit Ether Dst 00:23:54:52:18:6e  Src 00:00:a8:43:52:22 Type 0800
+(IP) IP   Ver/HL 45, ToS  0, Len  5dc, ID 9eaa, Flg/Frg    0, TTL 3c,  Prtl  6
+TCP from 164.152.77.128.22 to 164.152.77.50.6991     seq  1335114362, ack 34170
+69804, window 65535, 1460 data bytes, flags Push Ack.
13:52:04.692 Rcvd Ether Dst 00:00:a8:43:52:22  Src 00:23:54:52:18:6e Type 0800
+(IP) IP   Ver/HL 45, ToS  0, Len   28, ID 9324, Flg/Frg 4000, TTL 80,  Prtl  6
+TCP from 164.152.77.50.6991 to 164.152.77.128.22     seq  3417069804, ack 13351
+20266, window 16384, 0 data bytes, flags Ack.
13:52:04.692 Xmit Ether Dst 00:23:54:52:18:6e  Src 00:00:a8:43:52:22 Type 0800
+(IP) IP   Ver/HL 45, ToS  0, Len  5dc, ID 9eab, Flg/Frg    0, TTL 3c,  Prtl  6
+TCP from 164.152.77.128.22 to 164.152.77.50.6991     seq  1335120266, ack 34170
+69804, window 65535, 1460 data bytes, flags Ack.
13:52:04.694 Xmit Ether Dst 00:23:54:52:18:6e  Src 00:00:a8:43:52:22 Type 0800
+(IP) IP   Ver/HL 45, ToS  0, Len  3a4, ID 9eac, Flg/Frg    0, TTL 3c,  Prtl  6
+TCP from 164.152.77.128.22 to 164.152.77.50.6991     seq  1335121726, ack 34170
+69804, window 65535, 892 data bytes, flags Push Ack.
13:52:04.695 Rcvd Ether Dst 00:00:a8:43:52:22  Src 00:23:54:52:18:6e Type 0800
+(IP) IP   Ver/HL 45, ToS  0, Len   58, ID 9325, Flg/Frg 4000, TTL 80,  Prtl  6
+TCP from 164.152.77.50.6991 to 164.152.77.128.22     seq  3417069804, ack 13351
+20266, window 16384, 48 data bytes, flags Push Ack.

当跟踪记录包含来自多个连接的数据包,而您仅关注其中部分连接时,单行格式便显得尤为实用。创建单行格式后,您可轻松依据目标连接的独特特征进行筛选。

第二个脚本match.pl 可显示 文件内容,并支持对多个字符串进行匹配。例如:

perl match.pl -file full_trace.out -match 以太网 -match IP -match 校验和 -match TC+P -match 序列号 -dots
****************************** full_trace.out ******************************.
 . .
13:52:04.672 发送 以太网 目标 00:23:54:52:18:6e  源 00:00:a8:43:52:22 类型 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len  5dc, ID 9eaa, Flg/Frg    0, TTL 3c,  Prtl  6
Cksum  f68e, Src a4984d80, Dst a4984d32
TCP 来自 164.152.77.128.22 发往 164.152.77.50.6991
序列号 1335114362, 确认号 3417069804, 窗口 65535, 1460 数据字节, 标志位 推送确认
X/Off 05, Flags 18, Cksum 8d33,  Urg-> 0000.
 . .
13:52:04.692 接收以太网 目标 00:00:a8:43:52:22  源 00:23:54:52:18:6e 类型 0800
+(IP)
IP   版本/头部 45, 服务类型 0, 长度 28, 标识符 9324, 标志/分片 4000, 生存时间 80,  端口 6
校验和 83c8, 源地址 a4984d32, 目标地址 a4984d80
TCP 来自 164.152.77.50.6991 发往 164.152.77.128.22
序列号 3417069804, 确认号 1335120266, 窗口 16384, 0 数据字节, 标志 Ack.
X/Off 05, Flags 10, Cksum aad4,  Urg-> 0000.
 . .
13:52:04.692 发送以太网 目标 00:23:54:52:18:6e  源 00:00:a8:43:52:22 类型 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len  5dc, ID 9eab, Flg/Frg    0, TTL 3c,  Prtl  6
Cksum  f68d, Src a4984d80, Dst a4984d32
TCP 来自 164.152.77.128.22 发往 164.152.77.50.6991
序列号 1335120266, 确认号 3417069804, 窗口 65535, 1460 数据字节, 标志 Ack.
X/Off 05, Flags 10, Cksum 2626,  Urg-> 0000.
 . .
13:52:04.694 发送以太网 目标 00:23:54:52:18:6e  源 00:00:a8:43:52:22 类型 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len  3a4, ID 9eac, Flg/Frg    0, TTL 3c,  Prtl  6
Cksum  f8c4, Src a4984d80, Dst a4984d32
TCP 来自 164.152.77.128.22 发往 164.152.77.50.6991
序列号 1335121726, 确认号 3417069804, 窗口 65535, 892 数据字节, 标志位 推送确认
+k.
X/Off 05, Flags 18, Cksum d4c2,  Urg-> 0000.
 . .
13:52:04.695 接收以太网 目标 00:00:a8:43:52:22  源 00:23:54:52:18:6e 类型 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len   58, ID 9325, Flg/Frg 4000, TTL 80,  Prtl  6
Cksum  8397, Src a4984d32, Dst a4984d80
TCP 来自 164.152.77.50.6991 发往 164.152.77.128.22
序列号 3417069804, 确认号 1335120266, 窗口 16384, 48 数据字节, 标志位 推送确认
+.
X/Off 05, Flags 18, Cksum dde1,  Urg-> 0000.
 . .

有时需要保密的不只是数据本身。数据包中其他可识别身份的部分还包括IP地址和端口号。若需隐藏内部IP地址,您需要通过常用编辑器的全局搜索替换功能手动修改。但需注意,每个数据包中IP地址会出现在四个位置。前两个位置位于 十六进制 格式,后两个则采用 点分十进制 格式呈现,若未使用-numeric参数则可能以主机名显示(建议始终启用-numeric参数,因其省略域名解析更高效,且能清晰呈现网络关联关系)。 端口 仅出现在两个位置。

13:52:04.695 接收以太网数据包 目标地址 00:00:a8:43:52:22  源地址 00:23:54:52:18:6e 类型 0800
+(IP)
IP   版本/头部 45, 服务类型 0, 长度 58, 标识符 9325, 整数/分组标记 4000, 生存时间 80,  端口 6
校验和 8397, 源地址 a4984d32, 目标 a4984d80
TCP 来自 164.152.77.50发出的TCP数据包。6991 发往 164.152.77.128.22
序号 3417069804,确认 1335120266,窗口 16384,48 数据字节,标志 推送确认
+.
X/关闭 05,标志 18,校验和 dde1,紧急标志 0000

请注意,更改IP地址并非随意挑选数字那么简单,您需要保持地址之间的关联关系。任何两个在变更前位于同一子网或网络的地址,变更后必须保持在同一子网或网络中;同样地,任何两个在变更前位于不同子网或网络的地址,变更后也必须保持在不同子网或网络中。改变这种关联关系会对跟踪结果的解读产生深远影响。