原始套接字的问题???
我是小贺 2009-04-09 05:25:45 我建了一个IPPROTO_IP类型的原始套接字并bind到了我的机器上,
目的是为了查看发到我的机器上的IP数据包,但是,
无论我上QQ或是上论坛,都没有检测到IP数据包啊?
这是为什么呢?
void main()
{
// 创建原始套节字
SOCKET sRaw = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
// 获取本地IP地址
char szHostName[56];
SOCKADDR_IN addr_in;
struct hostent *pHost;
gethostname(szHostName, 56);
if((pHost = gethostbyname((char*)szHostName)) == NULL)
return ;
addr_in.sin_family = AF_INET;
addr_in.sin_port = htons(0);
// memcpy(&addr_in.sin_addr.S_un.S_addr, pHost->h_addr_list[0], pHost->h_length);
addr_in.sin_addr.s_addr=*((unsigned long*)pHost->h_addr);
printf(" Binding to interface : %s \n", ::inet_ntoa(addr_in.sin_addr));
if(bind(sRaw, (PSOCKADDR)&addr_in, sizeof(addr_in)) == SOCKET_ERROR)
return;
// 开始接收封包
char buff[1024];
int nRet;
while(TRUE)
{
nRet = recv(sRaw, buff, 1024, 0);
if(nRet > 0)
{
DecodeIPPacket(buff);
}
}
closesocket(sRaw);
}