Souvent, la seule façon, ou du moins la plus rapide, de résoudre les problèmes de communication réseau consiste à collecter une trace de la communication et à l'envoyer à un expert pour analyse. Lorsque l'expert ne fait pas partie de votre organisation, cela peut poser des problèmes de sécurité, car la trace contiendra des données d'application. Cependant, ce qui importe généralement, ce sont les en-têtes de protocole Ethernet, IP, TCP, UDP ou ICMP, et non les données d'application. Dans ce cas, vous pouvez soit ne pas collecter les données, soit les supprimer après les avoir collectées.
À l'aide de packet_monitor, vous pouvez collecter tous les en-têtes, mais aucune donnée, à l'aide de la commande suivante
packet_monitor -interface #INTERFACE -numeric -time_stamp -verbose -pkt_hdr
|
Où INTERFACE est le nom du périphérique de l'interface IP tel qu'affiché par la commande « ifconfig -all ». La trace ressemblera à ceci
dir type icmp
+ tcp
hh:mm:ss.ttt dir len proto source destination src port ds
+t port type
11:40:21.234 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 78, ID 2212, Flg/Frg 0, TTL 3c, Prtl 6
Cksum 788b, Src a4984d80, Dst a4984d32
TCP de 164.152.77.128.22 à 164.152.77.50.6991
seq 1332611210, ack 3416994988, fenêtre 8192, 80 octets de données, drapeaux Push Ack
+.
X/Off 05, Flags 18, Cksum c3aa, Urg-> 0000
11:40:21.235 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 a8, ID 2213, Flg/Frg 0, TTL 3c, Prtl 6
Cksum 785a, Src a4984d80, Dst a4984d32
TCP de 164.152.77.128.22 à 164.152.77.50.6991
seq 1332611290, ack 3416994988, fenêtre 8192, 128 octets de données, drapeaux Push Ac
+k.
X/Off 05, Flags 18, Cksum ce9f, Urg-> 0000
11:40:21.236 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 3032, Flg/Frg 4000, TTL 80, Prtl 6
Cksum e6ba, Src a4984d32, Dst a4984d80
TCP de 164.152.77.50.6991 à 164.152.77.128.22
seq 3416994988, ack 1332611418, fenêtre 16176, 0 octets de données, drapeaux Ack.
X/Off 05, Flags 10, Cksum 183c, Urg-> 0000
11:40:21.952 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 a8, ID 2214, Flg/Frg 0, TTL 3c, Prtl 6
Cksum 7859, Src a4984d80, Dst a4984d32
TCP de 164.152.77.128.22 à 164.152.77.50.6991
seq 1332611418, ack 3416994988, fenêtre 8192, 128 octets de données, drapeaux Push Ac
+k.
X/Off 05, Flags 18, Cksum 59a9, Urg-> 0000
11:40:21.953 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 98, ID 2215, Flg/Frg 0, TTL 3c, Prtl 6
Cksum 7868, Src a4984d80, Dst a4984d32
TCP de 164.152.77.128.22 à 164.152.77.50.6991
seq 1332611546, ack 3416994988, fenêtre 8192, 112 octets de données, indicateurs Push Ac
+k.
X/Off 05, indicateurs 18, somme de contrôle 2b4e, Urg-> 0000
|
Le problème avec cette approche est que parfois, le problème s'avère être lié à l'application et vous avez besoin des données de l'application. Si vous n'avez pas collecté une trace complète au départ, vous devez soit reproduire le problème, soit attendre qu'il se reproduise. Il est beaucoup plus facile de collecter une trace complète en ajoutant les arguments « -hex_dump » et « -length 1500 », puis en supprimant les données de l'application d'une copie lors de l'envoi initial de la trace pour analyse. La figure suivante montre la commande et la trace, mais pour gagner de la place, j'ai modifié la trace afin de supprimer la plupart des données de l'application.
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
|
Il existe plusieurs façons de supprimer les données d'application de la trace. Vous pouvez modifier manuellement la trace ; cela peut être possible pour les traces courtes, mais cela n'est pas faisable pour les traces plus longues. J'ai déjà publié deux scripts Perl qui peuvent être utilisés. Le premier, pm21line.pl, est conçu pour placer tous les en-têtes sur une seule ligne et supprimer les données d'application. Le script utilise l'indication IO, il doit donc être exécuté dans l'environnement 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.
|
Le format sur une seule ligne est utile lorsque la trace contient des paquets provenant de plusieurs connexions et que vous ne vous intéressez qu'à un sous-ensemble de ces connexions. Après avoir créé le format sur une seule ligne, vous pouvez facilement filtrer les caractéristiques uniques des connexions qui vous intéressent.
Le deuxième script match.pl affiche un fichier et vous permet d'effectuer une correspondance sur plusieurs chaînes. Par exemple
perl match.pl -file full_trace.out -match Ether -match IP -match Cksum -match TC
+P -match seq -dots
****************************** full_trace.out ******************************.
. .
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 de 164.152.77.128.22 à 164.152.77.50.6991
seq 1335114362, ack 3417069804, fenêtre 65535, 1460 octets de données, drapeaux Push A
+ck.
X/Off 05, Flags 18, Cksum 8d33, Urg-> 0000.
. .
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 de 164.152.77.50.6991 à 164.152.77.128.22
seq 3417069804, ack 1335120266, fenêtre 16384, 0 octets de données, drapeaux Ack.
X/Off 05, Flags 10, Cksum aad4, Urg-> 0000.
. .
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 de 164.152.77.128.22 à 164.152.77.50.6991
seq 1335120266, ack 3417069804, fenêtre 65535, 1460 octets de données, drapeaux Ack.
X/Off 05, Flags 10, Cksum 2626, Urg-> 0000.
. .
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 de 164.152.77.128.22 à 164.152.77.50.6991
seq 1335121726, ack 3417069804, fenêtre 65535, 892 octets de données, drapeaux Push Ac
+k.
X/Off 05, Flags 18, Cksum d4c2, Urg-> 0000.
. .
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 de 164.152.77.50.6991 à 164.152.77.128.22
seq 3417069804, ack 1335120266, fenêtre 16384, 48 octets de données, drapeaux Push Ack
+.
X/Off 05, Flags 18, Cksum dde1, Urg-> 0000.
. .
|
Parfois, les données ne sont pas les seules informations qui doivent rester confidentielles. Les autres éléments identifiants de la trace sont les adresses IP et les numéros de port. Si vous souhaitez masquer vos adresses IP internes, vous devrez effectuer les modifications manuellement à l'aide de la fonction de recherche et de remplacement globale de votre éditeur préféré. Cependant, les adresses IP apparaissent à quatre endroits dans chaque paquet. Les deux premiers se trouvent dans format hexadécimal et les deux autres sont au format décimal , ou éventuellement sous forme de nom si vous n'avez pas utilisé l'argument -numeric (je vous recommande de toujours utiliser -numeric, car c'est plus rapide puisque la résolution de nom n'a pas lieu et que cela rend les relations réseau plus évidentes). Le numéro ou le nom du port n'apparaît qu'à deux endroits.
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 provenant de 164.152.77.50.6991 à 164.152.77.128.22
seq 3417069804, ack 1335120266, fenêtre 16384, 48 octets de données, indicateurs Push Ack
+.
X/Off 05, indicateurs 18, somme de contrôle dde1, Urg-> 0000
|
Gardez à l'esprit que changer les adresses IP n'est pas aussi simple que de choisir un numéro arbitraire, vous devez maintenir les relations entre les adresses. Deux adresses qui se trouvent sur le même sous-réseau ou réseau avant le changement doivent se trouver sur le même sous-réseau ou réseau après le changement. De même, deux adresses qui se trouvent sur des sous-réseaux ou réseaux différents avant le changement doivent se trouver sur des sous-réseaux ou réseaux différents après le changement. Changer la relation peut avoir des effets profonds sur l'interprétation de la trace.
