原始套接字的问题???

我是小贺 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);
}
...全文
105 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yang_fujiang 2009-04-10
  • 打赏
  • 举报
回复
可以单步跟一下你的IP地址是什么? 看对不对
yang_fujiang 2009-04-10
  • 打赏
  • 举报
回复
pHost->h_addr 转换为网络字节序
街坊跳舞 2009-04-10
  • 打赏
  • 举报
回复
你绑定的端口号是 使用系统分配的 addr_in.sin_port = htons(0);

你尝试绑定一个特定的端口号试试看
lwd4210 2009-04-09
  • 打赏
  • 举报
回复
端口的问题吧,你换成80端口试试

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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