0

次のコードがあります。

Net::Pcap::loop($pcap, -1, \&proccess_packets, '');
sub proccess_packets {
    my ($user_data, $header, $packet) = @_;
    my $ip_packet = NetPacket::Ethernet::strip($packet);
    my $tcp_packet = NetPacket::IP::strip($ip_packet);
    my $tcp_obj = NetPacket::TCP->decode($tcp_packet);
    if ($tcp_obj->{data}) {
        my $request = HTTP::Request->parse($tcp_obj->{data});
        my %headers = split /[:\n]/, $request->headers_as_string;
        print Dumper($headers{'Accept-Language'});    # this line is printed
        print $headers{'Accept-Language'};            # this line is not printed
    }
}

この行が印刷される理由を誰かに説明してもらえますか:

print Dumper($headers{'Accept-Language'});

そして、これが印刷されない理由:

print $headers{'Accept-Language'};

ここで何が問題になる可能性がありますか?誰かアドバイスをいただけますか?libpcap のコールバック機構に関連していますか?

4

1 に答える 1

2

私はあなたのコードを実行しませんでしたが、スプリットでのヘッダー処理が間違っているように見えます。代わりにheader、HTTP::Request が継承するメソッドを使用してください。

于 2011-01-23T23:15:03.467 に答える