1

カスタム パケットを作成する必要があるプロジェクトを行っています。つまり、各パケット ヘッダーを制御する必要があります。ソケットを使用してこれを実行しようとしています。基本的に、私がする必要があるのはこれです:

SOCKET s = socket(PF_UNSPEC, SOCK_RAW, ethernet_type);

ethernet_type は、0xAAAA のように、カスタマイズされた非標準のものです。htons() を使用しています。また、winPcap を使用しないことが私にとって非常に好ましいです。

現在、エラー 10043 が発生しています。プロトコルはサポートされていません。

エラー メッセージは、システムにプロトコルを設定できることを示しているようですが、その方法がわかりません。

それは言います:

プロトコルがサポートされていません。要求されたプロトコルがシステムに構成されていないか、その実装が存在しません。たとえば、ソケット呼び出しは SOCK_DGRAM ソケットを要求しますが、ストリーム プロトコルを指定します。

ここにはいくつかの異なる問題があるので、誰かが少しでも意見を持っていれば、本当に感謝しています.

4

2 に答える 2

3

これらの 記事によると、Microsoft は非リムーバブル ホットフィックスで Windows から raw ソケット サポートを削除しました。そのため、別の OS に切り替えたくない場合は運が悪いかもしれません。

于 2009-04-22T01:58:36.017 に答える
0

ソケット呼び出しに新しいプロトコルを追加するのはかなり難しいと思います。ソケットがその呼び出しをサポートしていることを確認する必要があります。ソケット関数を再コンパイルする必要があると思いますが、Windowsでは簡単にできるとは思いません。

カスタム パケットを作成するために、新しいプロトコルを作成する必要はありません。

RAWソケットの正しい指定方法はこんな感じだと思います

SOCKET s;
s = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);

変数名が示唆するように生のイーサネットを実際に使用しようとしている場合は、winpcap ドライバーを使用するか、独自のドライバーを作成します。

生のイーサネットに対する別の「簡単な」解決策はないと思います。winpcap はかなり簡単なので、ぜひチェックしてみてください。

于 2009-04-22T01:59:22.550 に答える