在windows下,我这样写出错了。程序在ioctlsocket函数调用后便没有了任何反应,真是郁闷!!!
WSAData wsaData; WSAStartup(MAKEWORD(2, 2), &wsaData);
/*创建原始套接字*/ SOCKET sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
/*设置IP头操作选项*/ setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char*)&flag, sizeof(flag));
/*获取本机名*/ gethostname((char*)LocalName, sizeof(LocalName)-1);
/*获取本地 IP 地址*/ pHost = gethostbyname((char*)LocalName);
/*填充SOCKADDR_IN结构*/ addr_in.sin_addr = *(in_addr *)pHost->h_addr_list[0]; addr_in.sin_family = AF_INET; addr_in.sin_port = htons(50824);
/*把原始套接字sock 绑定到本地网卡地址上*/ bind(sock, (PSOCKADDR)&addr_in, sizeof(addr_in)); /*dwValue为输入输出参数,为1时执行,0时取消*/ DWORD dwValue = 1; /*设置 SOCK_RAW 为SIO_RCVALL,以便接收所有的IP包。其中SIO_RCVALL*/ ioctlsocket(sock, SIO_RCVALL, &dwValue);
|