2

ユーザーが作成した Perl スクリプトを実行しようとしていますが、

usage: my.pl <type> <stats> [-map <map>] <session1> [session2] 
Produces statistics about the session from a Wireshark .pcap file where:
<type> is the type of data in the pcap file (wlan, ethernet or ip)
<stats> is the output file to write notable information
<session> is the pcap input file or a folder containing pcaps (recursive)

しかし、以下のエラーで失敗します。

        $perl my.pl ethernet pa.xls google.pcap
        Processing pcap trace (TCP):
        Not a HASH reference at folder/httpTrace.pm line 654.

ここにデバッグコンソールがあります -

    Not a HASH reference at folder/httpTrace.pm line 654. at folder/httpTrace.pm line 654
        folder::httpTrace.pm::readHttp('HASH(0x2306d38)', undef) called at my.pl line 56
        main::__processSession('google.pcap') called at my.pl line 35 Debugged program terminated.  

httpTrace.pm: 最後の行 # 654

    sub readHttp($@)
    {
        my ($conntable, $map) = @_;
        my $http_req_id = 0;
        my $pipelining = 0;

        my $mapc;
        my @allReq;
        my @allRep;
        if( defined( $map ) ) {
            $mapc = $map->clone();
        }
    foreach my $connect ( sort { $pa->{'id'} <=> $pb->{'id'} } values( %{ $conntable } ) ) {

my.pl の 56 行目:

    my $stats = Pcapstats::HTTP::readHttp( \%tcp_stream, $map );

また、my.plにmap.pmと使用法があります

    my $map;
    if( $ARGV[0] eq '-map' ) {
        shift( @ARGV );
        $map = Pcapstats::Map->new( shift( @ARGV ) );
    }
4

1 に答える 1

0

あなたのファイルhttpTrace.pmには、この行があります

foreach my $connect ( sort { $pa->{'id'} <=> $pb->{'id'} } values( %{ $conntable } ) ) {

$paと私は何だろうか$pb?それらを他の場所に設定しない限り、それらは未定義になり、初期化されていない値の使用エラーが発生します。いずれにせよ、並べ替えを行うことはありません。

しかし、それはNot a HASH referenceエラーを説明していません$conntable。autovivication は空のハッシュを自動的に作成するため、定義されていなくてもエラーは発生しません。そのため、おそらく単純な文字列または数値、または配列参照である可能性があります。

設定するコードを表示したい場合は、$conntableさらに支援できる場合があります。

于 2012-07-23T23:27:10.990 に答える