0

カスタム アプリケーションを構築するために airodump-ng を変更しています。

この形式の出力が必要です

{AP Mac 1, Station Mac 1},{AP Mac 2, Station Mac 2},...............

これを行うには、トラバースしstruct ST_INFO、複数のstrcat呼び出しを使用して、上記の形式で配列を生成します。

この問題は、MAC アドレスに先行するゼロが含まれている場合に発生し、これによりデータが破損します。

eg: 0A1B23443311 is saved as A1B23443311
eg: 001B3311ff22 is saved as   1B3311ff22 ( The 0s have been ignored)

MAC アドレスの前にゼロが含まれている場合、データが正しく保存されるようにするにはどうすればよいですか?

最終的な配列はファイルに書き込まれます。

更新: C で先頭の 0 を印刷しますか?

MACアドレスを印刷しようとすると、結果は上記の例と同じでしたが、使用すると%02x(上記のリンクからそれについて学びました)、印刷したいときに問題が解決しました。

内容を配列に保存したいので、 %02x for のようなトリックはありますかprintf?

構造体 ST_INFO にはunsigned char st_mac[6](MAC アドレスは 16 進形式で格納されます) が含まれており、最終的な配列もunsigned char配列です。

4

2 に答える 2

0

複数の方法がありますが、snprintf()またはその親戚の 1 つを使用している場合は、%02x(または多分%02X%.2xまたは%.2X) 形式が役立ちます。例えば:

const unsigned char *st_mac = st_info_struct.st_mac;
unsigned char  buffer[13];

for (int i = 0; i < 6; i++)
    sprintf(&buffer[2*i], "%.2X", st_mac[i]);

(通常、 を使用するsnprintf()のは良い考えです。ここでは、間違っているわけではありませんが、不要なやり過ぎです。)

strcat()文字列を構築するために複数の呼び出しを使用しないでください。それは二次アルゴリズムにつながります。文字列が長い場合 (キロバイト以上)、これが問題になり始めます。strcat()ストレージスペースをオーバーフローしないようにするには、すべての長さ (これまでに作成した文字列とそれに追加する文字列) を知る必要があるため、使用しないでください。

于 2014-08-28T14:04:31.807 に答える