recSocket = socket(AF_INET, SOCK_RAW, IPPROTO_IP); // WSASocket
if(recSocket == INVALID_SOCKET)
{
PrintInfo("\r\nsocket() error: %d", recSocket);
::WSACleanup();
nNetOK = -1;
return -2;
}
//setsockopt();.......set ip header
char hname[256];
struct hostent *pHost;
sockaddr_in addr;
if(gethostname(hname, sizeof(hname)) < -1)
{
PrintInfo("\r\ngethostname() error");
closesocket(recSocket);
recSocket = INVALID_SOCKET;
::WSACleanup();
nNetOK = -1;
return -3;
}
else
{
pHost = gethostbyname(hname);
addr.sin_addr = *(in_addr *)pHost->h_addr_list[0];
addr.sin_family = AF_INET;
addr.sin_port = htons(1234); // >1024, IP層可填任意值
if(bind(recSocket, (struct sockaddr *)&addr, sizeof(addr)) == SOCKET_ERROR)
{
PrintInfo("\r\nbind() error");
closesocket(recSocket);
recSocket = INVALID_SOCKET;
::WSACleanup();
nNetOK = -1;
return -4;
}
#define SIO_RCVALL (IOC_IN | IOC_VENDOR | 1)
u_long sio;
DWORD value;
if(WSAIoctl(recSocket, SIO_RCVALL, &sio, sizeof(sio), NULL, 0, &value, NULL, NULL) == SOCKET_ERROR)
{
前面都沒問題,執行到這一步錯誤,錯誤下面為10022,系統為Win7_64,但是已經設定了管理員權限,應該沒問題吧
int err= WSAGetLastError();
PrintInfo("\r\nWSAIoctl() error: %d", err );
closesocket(recSocket);
recSocket = INVALID_SOCKET;
::WSACleanup();
nNetOK = -1;
return -5;
}
}
uj5u.com熱心網友回復:
安全限制? Windows下底層RAW資料包發送實戰uj5u.com熱心網友回復:

你是想raw socket,recv all嗅探所有包?
xp時代還允許。后來系統應該都禁止了。
非要嗅探。就要用Winpcap.
uj5u.com熱心網友回復:
設定為管理員權限還是沒問題的。而且打開套接字的時候也沒有報錯。
uj5u.com熱心網友回復:
是有這個問題。但設定為管理員權限好像就OK了。而且如果有這個問題我記得應該是打開套接字就失敗的。不知道是不是這樣。
uj5u.com熱心網友回復:
WSAIoctl Function 的檔案中有說明WSAEINVAL
The dwIoControlCode parameter is not a valid command, or a specified input parameter is not acceptable, or the command is not applicable to the type of socket specified.
uj5u.com熱心網友回復:
這是說對原始套接字不能用SIO_RCVALL?在XP下這樣用沒問題,但是Win7下就出問題。是因為權限么?
我已經改為管理者權限,也可以打開套接字。
uj5u.com熱心網友回復:
不僅僅是用戶權限吧,應該是系統內核中已經做了限制了,普通的RAW還是可以操作的, 比如pingSIO_RCVALL在MSDN檔案中也沒有宣告,即便是不支持也只能算是修復了以前的BUG
uj5u.com熱心網友回復:
我也遇到過這個問題,很坑的。把#include <thread.h> 注釋。或者將這段代碼,封裝到單獨一個cpp檔案里面。uj5u.com熱心網友回復:
好好看msdn,樓上已經講過了
原始套接字在win7含之后就不允許使用了。
嗅探以及發送原始幀使用winpcap
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/13602.html
標籤:網絡編程
上一篇:看到一篇牛X的圖形影像處理論文
下一篇:c++ 報錯
