0

私は C 言語の初心者で、イーサネット ネットワーク用のアイドル ポート モニター アプリケーションを作成しようとしています。このアプリケーションは、プロトコルごとにブロードキャスト トラフィックを測定し、テキスト ファイル レポートを生成しますが、ファイルに出力される出力は、たとえば、以下に示すようにコードの 174 行目で予想される値 arp1_source を出力します。

arp1_source = source;
fprintf(stdout,"arp1->source is %s\n",arp1_source);

しかし、1365 行で同じ変数の内容を出力すると、別の MAC アドレスが出力されます。

fprintf(stdout ,"       %s          %d.%d.%d.%d      %d   %d\n",
  arp1_source,
  arp1_ip_source[0],
  arp1_ip_source[1],
  arp1_ip_source[2],
  arp1_ip_source[3],
  arp1_total,
  arp1);

なぜこれが起こっているのか途方に暮れています。何が間違っているのかわかりません。助けてください。私のコードは以下のとおりです(かなり長いので、必要に応じて完全なコードを送ることができます)ありがとう。

変数を定義しましたが、パケットのライブ キャプチャを実行しているときに、最初の行に出力された arp1_source 内の値は、キャプチャが完了した後にテキスト ファイルに書き込まれた値とは異なります。プリントアウト

「arp1-ソースは 0e:32:64:89:20:5e です」

そして、2番目のコードに示すように、arp1_source内に保存されているMACアドレスをテキストファイルに出力すると、間違ったMACアドレスが出力されます.元のMACアドレスが別のMACアドレスに上書きされているようです.格納する文字列を宣言しましたconst キーワードを使用した MAC アドレス。

4

1 に答える 1

0

seems like original mac address is overwritten by another one-ええ、それはまさに起こっていることのように聞こえます。

この質問が現在書かれている方法では、それに答える方法はありません。174 行目で期待どおりの結果が得られたのに、1365 行目で文字列が変更された理由を知りたいと思います... 1191 行のコードを確認することが望ましいことを理解するには、. あなたが言ったように、それは長いので、ここにいくつかのアイデアがあります:

  • arp1_sourceが設定されているコード内のすべての場所、またはそこから別の変数が設定されている場所を検索します(具体的には、arp1_sourceのアドレスを取得する二重ポインターはありますか?)

  • そのアドレスを関数に渡すことはありますか? それはそれを変更するための主要な場所です

  • デバッガーを入手して、コードをステップ実行します。値がどこかで変化することはわかっていますが、どこを把握する必要があるだけです。

  • 最悪の場合、いつでもバイナリ検索できます。769 行目付近で の値が出力arp1_sourceされますが、これは期待どおりですか? はいの場合: 1066 前後の値を出力します。いいえの場合: 行 471 付近の値を出力し、値が変更されている場所を正確に把握するまで続けます。

于 2013-02-15T12:58:16.857 に答える