私は、あなたが与えた任意のIPとポート番号でsynパケットを送出する小さなツールをコーディングしました - そして、私がWiresharkをポップアップしたとき、送られたパケットはうまく表示されます。あなたの典型的なTCP SYNパケットのように見えます。synの後にackを取得する
何らかの理由で、ACKがサーバーから送信されません。だから、2つの問題があります。 1つ、ACK応答なし。 2つ目は、私のプログラム(bind()?)を使ってackの応答を受け取る方法を知りません。
syn flooderからいくつかのコードを変更しましたが、私はオンラインのスクリプトコードを修正しました。スクリプトコードは簡単に実行できますが、何か不足している可能性があります。サーバのACK拒否。正当なIPアドレスからsynリクエストが送信されるように、コードが変更されています。次のコードは、私のip + tcpヘッダーを示しています。
iph->ihl = 5;
iph->version = 4;
iph->tos = 0;
iph->tot_len = sizeof (struct ip) + sizeof (struct tcphdr);
iph->id = htonl (54321); //Id of this packet
iph->frag_off = 0;
iph->ttl = 255;
iph->protocol = 6;
iph->check = 0; //Set to 0 before calculating checksum
iph->saddr = 0; //Source ip filled in by kernel
iph->daddr = sin.sin_addr.s_addr;
//TCP Header
tcph->source = htons (9999);
tcph->dest = htons (atoi(argv[2]));
tcph->seq = random();
// tcph->ack_seq = 0;
tcph->doff = 5; /* first and only tcp segment */
tcph->syn = 1;
tcph->window = htonl (65555); /* maximum allowed window size */
tcph->check = 0;/* if you set a checksum to zero, your kernel's IP stack
should fill in the correct checksum during transmission */
tcph->urg_ptr = 0;
//Now the IP checksum
iph->check = csum ((unsigned short *) datagram, iph->tot_len >> 1);
したがって、私はそれを送り返しません。私は何が欠けていますか?
あなたのパケットが破棄されているように見えます。私は両方のエンドポイントでスニッファをチェックすることをお勧めします。 – jweyrich