请教关于bind的问题。。。
夜风似影 2012-10-11 11:50:55 int main(){
WSADATA wsadata;
if(WSAStartup(MAKEWORD(2, 2,), &wsadata)!=0){
printf("InitWSASartup error!");
return -1;
}
SOCKET rawsock = NULL;
SOCKADDR_IN addrsock;
int settimeout = 500;
if((rawsock=socket(AF_INET, SOCK_RAW, IPPROTO_IP))==INVALID_SOCKET)
{
printf("Socket Setup error!\n");
return -1;
}
addrsock.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrsock.sin_family = AF_INET;
addrsock.sin_port = htons(10050);
char name[100] ={0};
struct hostent* pHostent;
gethostname(name, 100);
pHostent=gethostbyname(name);
int num=0;
while( pHostent->h_addr_list[num++] != NULL);
num -=1 ;
printf("%s\n",inet_ntoa(*((in_addr*)pHostent->h_addr_list[0])));
addrsock.sin_addr.S_un.S_addr = inet_addr("192.186.168.132");
int ret = bind(rawsock, (SOCKADDR*)&addrsock, sizeof(SOCKADDR));
if(ret==SOCKET_ERROR){
printf("socked bind fail!\n");
printf("%d",GetLastError);
}
setsockopt(rawsock,SOL_SOCKET,SO_RCVTIMEO,(char *)&settimeout,sizeof(int));
DWORD lpvBuffer = 1;
DWORD lpcbBytesReturned = 0;
DWORD lpoBuffer = 1;
WSAOVERLAPPED wsaover;
if(WSAIoctl(rawsock, SIO_RCVALL, &lpvBuffer, sizeof(lpvBuffer), &lpoBuffer, sizeof(lpoBuffer), &lpcbBytesReturned, NULL, NULL)!=SOCKET_ERROR){
printf("set socket model fail!\n");
printf("%d\n",WSAGetLastError());
return -1;
}
//listen(rawsock, 5);
SOCKADDR_IN addrrecv;
int len = sizeof(addrrecv);
while(1){
char recvbuff[200];
ret = recvfrom(rawsock, recvbuff, 200, 0, (SOCKADDR*)&addrrecv, &len);
IPHEADER* pIpheader;
pIpheader = (IPHEADER*)recvbuff;
if (pIpheader->proto==IPPROTO_TCP)
{
char* sourceip=inet_ntoa(addrrecv.sin_addr);
printf("%s\n", sourceip);
TCPHEADER *lpTCPheader=(TCPHEADER*)(recvbuff+sizeof(IPHEADER));
int Port = ntohs(lpTCPheader->th_sport);
printf("%d\n", Port);
}
}
}
想写个抓包程序,为什么我绑定的是INADDR_ANY,bind就可以成功,但是没有抓到包,而绑定的是本地地址192.168.186.132就一直失败,是什么原因,谢谢了!
没分了,只能来非技术区发帖了!汗 !!!