请教关于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就一直失败,是什么原因,谢谢了!
没分了,只能来非技术区发帖了!汗 !!!
...全文
71 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Feiyan_d 2012-10-12
  • 打赏
  • 举报
回复
应该是Window权限的限制,如果没猜错的话,错误码应该是10013。得错误码应该用WSAGetLastError.

看一下《WinSock网络编程经络》第17章原始套接口,说明了Windows对原始套接口的限制,
这里有源码,你可以先参考下:http://download.csdn.net/detail/geoff08zhang/4571358

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧