0

わかりました、それは非常に奇妙な問題です。ping 要求をスプーフィングするために生のソケット ICMP パケットを作成しようとしていました。

int s;
s = socket(PF_INET, SOCK_RAW, IPPROTO_RAW);

その後

int one; // I should initialize it as 1, but I didn't. 
const int *val = &one;
setsockopt(s, IPPROTO_IP, IP_HDRINCL, val, sizeof(one));
....

1 として初期化していないため、偽装されたクライアントは ping 応答を受信できないことがわかりました。ただし、追加すると

unsigned char *ch = (unsigned char *)spoof;

直前に

close(s);

スプーフィングされたクライアントが ping 応答を受信できることが判明しました。何故ですか?

4

1 に答える 1

4

自動ストレージの初期化に失敗した場合、取得される値は、プログラムまたは同じ VM スペースで実行された以前のプログラムによって最後に使用されたものによって異なります。その結果、何でも起こりえます。コード行を追加するとone、スタック上の値の配置が異なります。新しい場所のその変数のそのジャンクにより、生のソケットが機能することができました。もう一方はしませんでした。運が良かった。

于 2013-02-06T04:04:55.960 に答える