0

Net::Pcapキャプチャ内の対象パケットのペイロードを出力するモジュールによって生成される以下の情報があります。

以下のデータは、Perl 内でキャプチャされた Windows 実行可能ファイルの抜粋です。

すべての 16 進データ出力を 1 つのファイルまたは変数にキャプチャして、16 進ダンプの整合性を維持しながらファイル ダウンロードのセッション データを評価できるようにしたいと考えています。

私が抱えている問題は、ファイルのダウンロードのために生成される各パケットに対して、明らかに 16 進ダンプ出力が生成されることです。これは、以下の出力で文字列 "Payload" I print per packet/hex dump output で簡単に確認できます。

特定のファイル ダウンロード セッションに関連するすべてのデータを結び付けたいと考えています。Perlでこれを行うにはどうすればよいですか?

Payload:HTTP/1.1 200 OK
Date: Fri, 15 Jun 2012 02:31:32 GMT
Server: Apache
Last-Modified: Sat, 10 Dec 2011 13:38:37 GMT
ETag: "dc44da-4d000-4b3bd04c7a2f1"
Accept-Ranges: bytes
Content-Length: 315392
Keep-Alive: timeout=15, max=99
Connection: Keep-Alive
Content-Type: application/x-msdos-program

MZ<90>^@^C^@^@^@^D^@^@^@<FF><FF>^@^@<B8>^@^@^@^@^@^@^@@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@<F8>^@^@^@^N^_<BA>^N^@<B4> <CD>!<B8>^AL<CD>!This program cannot be run in DOS mode.^M
$^@^@^@^@^@^@^@4^TGmpu)>pu)>pu)>c}@>ru)>uyI>ru)>uy&>ku)>c}t>ru)><F3>}t>uu)>pu(>
u)>uyv><DA>u)><9C>~w>qu)>uys>qu)>Richpu)>^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@PE^@^@L^A^D^@^_R<E3>N^@^@^@^@^@^@^@^@<E0>^@^O^A^K^A^G
^@<80>^C^@^@<90>^A^@^@^@^@^@g^F^C^@^@^P^@^@^@<90>^C^@^@^@@^@^@^P^@^@^@^P^@^@^D^@^@^@^@^@^@^@^D^@^@^@^@^@^@^@^@ ^E^@^@^P^@^@^@^@^@^@^C^@^@^@^@^@^P^@^@^P^@^@^@^@^P^@^@^P^@^@^@^@^@^@^P^@^@^@^@^@^@^@^@^@^@^@<A8><91>^D^@P^@^@^@^@^@^E^@<C8>^T^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@@<91>^D^@H^@^@^@^@^@^@^@^@^@^@^@^@<90>^C^@<D0>^A^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@.text^@^@^@As^C^@^@^P^@^@^@<80>^C^@^@^P^@^@^@^@^@^@^@^@^@^@^@^@^@^@ ^@^@`.rdata^@^@<C2>^K^A^@^@<90>^C^@^@^P^A^@^@<90>^C^@^@^@^@^@^@^@^@^@^@^@^@^@@^@^@@.data^@^@^@D]^@^@^@<A0>^D^@^@^P^@^@^@<A0>^D^@^@^@^@^@^@^@^@^@^@^@^@^@@^@^@<C0>.rsrc^@^@^@<C8>^T^@^@^@^@^E^@^@ ^@^@^@<B0>^D^@^@^@^@^@^@^@^@^@^@^@^@^@@^@^@@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@Payload:^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^

提案してくれたボロディンに感謝します。ただし、このモジュールを正しく使用する方法がわかりません。同じ出力が得られていることは明らかです。これは、このモジュールと印刷された 16 進数で使用しているコードのスニペットです。ご覧のとおり、印刷された 16 進数は 1 つの 16 進数出力として結合されているのではなく、結合したい特定の TCP ストリームに対して 2 つの別々の出力として結合されています。どんな助けでも大歓迎です。

my $user_data;
my $header;
my $packet;    
my $err ='';
my $pcap = Net::Pcap::open_offline("./pcap", \$err) or die "can't open ./pcap...$err\n";
Net::Pcap::loop($pcap, -1, \&process_pkt, '');
Net::Pcap::Reassemble::loop($pcap, -1, \&rend_callback, '');
Net::Pcap::close($pcap);

my $ip;
my $tcp;
my $payload;
sub process_pkt   
{
my ($user_data,$header, $packet) = @_;
$ip = NetPacket::IP->decode(eth_strip($packet));
$tcp = NetPacket::TCP->decode($ip->{data});
$payload = $tcp->{data};

my $hexPayload = hexdump(data => $payload, start_position => 0) if length $payload;
print "Hex Payload:". $hexPayload;
}

印刷出力:

Hex ペイロード: 0x0000 : 47 45 54 20 2F 6D 61 63 2F 5F 62 61 73 65 5F 76 : GET./mac/_base_v 0x0010 : 31 2F 73 63 72 69 70 74 2F 6A 71 75 65/2D スクリプト 1D: /jquery- 0x0020 : 31 2E 36 2E 31 2E 6A 73 20 48 54 54 50 2F 31 2E : 1.6.1.js.HTTP/1. 0x0030 : 31 0D 0A 48 6F 73 74 3A 20 77 77 77 2E 6D 69 63 : 1..Host:.www.mic 0x0040 : 72 6F 73 6F 66 74 2E 63 6F 6D 0D 0A 55 73 : 65 rosoft 72 ..ユーザー 0x0050 : 2D 41 67 65 6E 74 3A 20 4D 6F 7A 69 6C 6C 61 2F : -エージェント:.Mozilla/ 0x0060 : 35 2E 30 20 28 4D 61 63 69 6E 74 6F 73 68 0 ( 3B . 5. Macintosh;. 0x0070 : 49 6E 74 65 6C 20 4D 61 63 20 4F 53 20 58 20 31 : Intel.Mac.OS.X.1 0x0080 : 30 2E 36 3B 20 72 76 3A 31 33 2E 30 29 25 : 47 0.6;.rv:13.0).Ge 0x0090: 63 6B 6F 2F 32 30 31 30 30 31 30 31 20 46 69 72: cko/20100101.Fir 0x00A0: 65 66 6F 78 2F 310 33 2E 3 6 6 40D 70 :/..Accept-L 0x00C0 : 61 6E 67 75 61 67 65 3A 20 65 6E 2D 75 73 2C 65 : 言語:.en-us、e 0x00D0 : 6E 3B 71 3D 30 2E 35 0D 0A 41 63 63 7 45 70 : n;q=0.5..Accept- 0x00E0: 45 6E 63 6F 64 69 6E 67 3A 20 67 7A 69 70 2C 20: エンコード:.gzip,. 0x00F0 : 64 65 66 6C 61 74 65 0D 0A 52 65 66 65 72 65 72 : deflate..Referer 0x0100 : 3A 20 68 74 74 70 3A 2F 2F 77www 77 77 2E 6D 69 : http:// .マイク 0x0110 : 72 6F 73 6F 66 74 2E 63 6F 6D 2F 6D 61 63 2F 72 : rosoft.com/mac/r 0x0120 : 65 6D 6F 74 65 2D 64 65 73 6B 74 6F 70 2D デスクトップ emote 63 6C cl 0x0130 : 69 65 6E 74 0D 0A 44 4E 54 3A 20 31 0D 0A 43 6F : ient..DNT:.1..Co 0x0140 : 6E 6E 65 63 74 69 6F 6E 3A 20 6B 65 6ction5 71 : 2Dne 6 :.keep-a 0x0150 : 6C 69 76 65 0D 0A 0D 0A 00 00 00 00 00 00 00 00 : ライブ....... Hex ペイロード: 0x0000 : 48 54 54 50 2F 31 2E 31 20 32 30 30 20 4F 4B 0D : HTTP/1.1.200.OK。0x0010 : 0A 43 61 63 68 65 2D 43 6F 6E 74 72 6F 6C 3A 20 : キャッシュ制御:。0x0020 : 6D 61 78 2D 61 67 65 3D 39 30 30 0D 0A 43 6F 6E : max-age=900..Con 0x0030 : 74 65 6E 74 2D 54 79 70 65 3A 20 61 70 70 : 6C テントタイプ : 69 .appli 0x0040 : 63 61 74 69 6F 6E 2F 78 2D 6A 61 76 61 73 63 72 : cation/x-javascr 0x0050 : 69 70 74 0D 0A 43 6F 6E 74 65 6E 74 2D 45 - 6E コンテンツEnc 0x0060 : 6F 64 69 6E 67 3A 20 67 7A 69 70 0D 0A 4C 61 73 : oding:.gzip..Las 0x0070 : 74 2D 4D 6F 64 69 66 69 65 64 3A 20 57 65 : 64t 20 57 65 変更済み.水曜日, 0x0080 : 20 30 38 20 4A 75 6E 20 32 30 31 31 20 31 38 3A : .08.Jun.2011.18: 0x0090 : 34 35 3A 34 39 20 47 4D 54 0D 7 5 : 6 6 49.GMT..Accept キャッシュ制御:。0x0020 : 6D 61 78 2D 61 67 65 3D 39 30 30 0D 0A 43 6F 6E : max-age=900..Con 0x0030 : 74 65 6E 74 2D 54 79 70 65 3A 20 61 70 70 : 6C テントタイプ : 69 .appli 0x0040 : 63 61 74 69 6F 6E 2F 78 2D 6A 61 76 61 73 63 72 : cation/x-javascr 0x0050 : 69 70 74 0D 0A 43 6F 6E 74 65 6E 74 2D 45 - 6E コンテンツEnc 0x0060 : 6F 64 69 6E 67 3A 20 67 7A 69 70 0D 0A 4C 61 73 : oding:.gzip..Las 0x0070 : 74 2D 4D 6F 64 69 66 69 65 64 3A 20 57 65 : 64t 20 57 65 変更済み.水曜日, 0x0080 : 20 30 38 20 4A 75 6E 20 32 30 31 31 20 31 38 3A : .08.Jun.2011.18: 0x0090 : 34 35 3A 34 39 20 47 4D 54 0D 7 5 : 6 6 49.GMT..Accept キャッシュ制御:。0x0020 : 6D 61 78 2D 61 67 65 3D 39 30 30 0D 0A 43 6F 6E : max-age=900..Con 0x0030 : 74 65 6E 74 2D 54 79 70 65 3A 20 61 70 70 : 6C テントタイプ : 69 .appli 0x0040 : 63 61 74 69 6F 6E 2F 78 2D 6A 61 76 61 73 63 72 : cation/x-javascr 0x0050 : 69 70 74 0D 0A 43 6F 6E 74 65 6E 74 2D 45 - 6E コンテンツEnc 0x0060 : 6F 64 69 6E 67 3A 20 67 7A 69 70 0D 0A 4C 61 73 : oding:.gzip..Las 0x0070 : 74 2D 4D 6F 64 69 66 69 65 64 3A 20 57 65 : 64t 20 57 65 変更済み.水曜日, 0x0080 : 20 30 38 20 4A 75 6E 20 32 30 31 31 20 31 38 3A : .08.Jun.2011.18: 0x0090 : 34 35 3A 34 39 20 47 4D 54 0D 7 5 : 6 6 49.GMT..Accept

4

1 に答える 1

0

を見てみましょうNet::Pcap::Reassemble

このモジュールは、Net::Pcap loop() 関数によって返された libpcap パケット キャプチャ データ内の断片化されたデータグラムの再構築を実行します。

于 2012-08-02T03:18:16.140 に答える