RawSocketでパケット送信実験中
msdn-WSASendを参考に、生パケットを送るコードを書いてみる
bool RawSocket::Write(byte* buff, dword size, dword* writeSize) { unsigned long length; unsigned long flags = 0; WSABUF wsb; wsb.buf = (PTCHAR)buff; wsb.len = size; if (SOCKET_ERROR == WSASend(this->socket, &wsb, 1, &length, flags, NULL, NULL)) { TRACE("SEND ERROR \n"); return false; } *writeSize = length; return true; }
これを実行すると、WSAGetLastError()で「WSAENOTCONN」が返ってくる。
Error Codeによれば、
Socket is not connected.
A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using sendto) no address was supplied. Any other type of operation might also return this error―for example, setsockopt setting SO_KEEPALIVE if the connection has been reset.
とのこと。
つまりコネクトしてないよと。
これは
- 素直に実は事前にConnectする必要あり(でもIPヘッダにコネクト先があるのに事前にコネクトって変だ)
- 呼出し手順が違う
のどちらだろうか。
調べるとしたらhttp://search.microsoft.com/search/results.aspx?view=msdn&st=b&na=82&qu=sock_raw&s=1&swc=4http://search.microsoft.com/search/results.aspx?view=msdn&st=b&na=82&qu=sock_raw&s=1&swc=4あたりかなぁ。
送信となると資料が激減するのが痛いですな。
情報求む。