0

やあ、私は自分のネットワーク トラフィックを確認するための単純なコンソール アプリケーションを作成しようとしています。

とにかく、WSAIoctl関数からエラーが発生し、WSAGetLastErrorが私に与えているエラーコードは10022であり、MSDNはこれに関連していることを教えてくれます:

無効な引数。無効な引数が指定されました (setsockopt 関数に無効なレベルを指定したなど)。場合によっては、ソケットの現在の状態も参照します。たとえば、リッスンしていないソケットで accept を呼び出す場合などです。

私は運なしで引数をいじってみました:/助けてください:P

ここに私のコードがあります:

WSADATA wsaData;
int startup = WSAStartup(0x0202, &wsaData);

if(startup != 0) {
    cout << "Error: could not initalize WSADATA for target socket." << endl;
    system("pause");
}

unsigned long BytesReturned;
int InBuffer, OutBuffer, LPCVoid;
int optValue = 1;
SOCKET sock = socket(AF_INET, SOCK_RAW, IPPROTO_IP);

Sleep(await);
cout << "creating and configuring RAW_SOCK" << endl;

int listening = listen(sock, SOMAXCONN); // tried debugging using this.
int sockopt = setsockopt(sock, IPPROTO_IP, 2, (char*)&optValue, sizeof(optValue));
int SockMode = WSAIoctl(sock, SIO_RCVALL, &InBuffer, sizeof(InBuffer), &OutBuffer, sizeof(OutBuffer), &BytesReturned, NULL, NULL);
//0x98000001
if(SockMode == 0) {
    Sleep(await);
    cout << "RAW_SOCKET created successfully!" << endl << "Trying to listen for incoming network packets..." << endl;
    int listeningk = listen(sock, SOMAXCONN);

    if(listening == 0) {
        Sleep(await);
        cout << "socket listening without problems, looking for incoming request..." << endl;
    }
    else {
        Sleep(await);
        cout << "Error: could not listen on socket." << endl;
        exit(EXIT_FAILURE);
    }
}
else {
    Sleep(await);
    cout << "Error: could not create RAW_SOCKET..." << endl << "Dumping SockMode!\r\nint SockMode = " << SockMode << endl;
    cout << "setsockopt = " << sockopt << endl; 
    cout << "WSAGetLastError: " << WSAGetLastError() << endl;
    system("pause");
}
4

1 に答える 1

0

リッスンするには、ソケットをバインドする必要があります。さらに、このオプションについては、( MSDN docsから)WSAIoctl従う必要があります。

ソケットは、明示的なローカル IPv4 または IPv6 インターフェースにもバインドする必要があります。つまり、INADDR_ANY または in6addr_any にバインドすることはできません。

このコードを進めようとする前に、いくつかの基本的な自己教育を行うことをお勧めします。MSDN には、ソケットのセットアップなどの一般的な操作のコード サンプルがあります。

于 2013-01-29T19:23:22.847 に答える