网络封包抓取的疑惑? 本帖最后由 oyljerry 于 2011-09-20 17:29:04 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 抓包的时候有没有设置过滤条件?是不是把自己的IP地址给过滤掉了.或者说是具体到某种协议,比如TCP,而你机器上当时正好没有用TCP通信的软件. 只是查看经过本地网卡的流量我贴下代码吧:BOOL flag=TRUE;if (setsockopt(sRaw, IPPROTO_IP, IP_HDRINCL, (char*)&flag, sizeof(flag)) == SOCKET_ERROR){ printf("setsockopt IP_HDRINCL error!\n"); return ;}// 设置SIO_RCVALL控制代码,以便接收所有的IP包 DWORD dwValue = 1;if(ioctlsocket(sRaw, SIO_RCVALL, &dwValue) != 0) return ;//解析封包,其实就是查看源地址和目的地址而已void DecodeIPPacket(char *pData){ IPHeader *pIPHdr = (IPHeader*)pData; in_addr source, dest; char szSourceIp[32], szDestIp[32]; printf("\n\n-------------------------------\n"); // 从IP头中取出源IP地址和目的IP地址 source.S_un.S_addr = pIPHdr->ipSource; dest.S_un.S_addr = pIPHdr->ipDestination; strcpy(szSourceIp, ::inet_ntoa(source)); strcpy(szDestIp, ::inet_ntoa(dest)); printf(" %s -> %s \n", szSourceIp, szDestIp); // IP头长度 int nHeaderLen = (pIPHdr->iphVerLen & 0xf) * sizeof(ULONG); switch(pIPHdr->ipProtocol) { case IPPROTO_TCP: // TCP协议 printf("TCP\n"); DecodeTCPPacket(pData + nHeaderLen); break; case IPPROTO_UDP: printf("UDP\n"); break; case IPPROTO_ICMP: printf("ICMP\n"); break; }} 可以去看看广播和多播,至于单播,你只能收到发送给自己的,除非你用的是HUB,而非SWITCH MFC怎么才能将数个位图加载到对话框中的Picture控件上 如何建立具有template <class T>的类实例? 长了一个三角,我很高兴。 可以知道系统当前其它进程的窗口句柄,怎样获得其执行文件的路径? 小妹先谢谢大家了!!今天又有一个问题要问各位大哥!!还是请大家多多帮忙哦!! 数据库的提供者 请问如何用VC++程序操作注册表(创建,修改,删除 主键和各类键值) 我做了一个下拉树形控件(CTreeComboBox),想要的举手!!! 怎么一按ESC键对话框就关掉了? 如何向手机发短信息?? 有没有哪个大哥程序代写的 如何用VC代码取得一个硬件设备是否正常工作的状态
只是查看经过本地网卡的流量
我贴下代码吧:BOOL flag=TRUE;
if (setsockopt(sRaw, IPPROTO_IP, IP_HDRINCL, (char*)&flag, sizeof(flag)) == SOCKET_ERROR)
{
printf("setsockopt IP_HDRINCL error!\n");
return ;
}
// 设置SIO_RCVALL控制代码,以便接收所有的IP包
DWORD dwValue = 1;
if(ioctlsocket(sRaw, SIO_RCVALL, &dwValue) != 0)
return ;//解析封包,其实就是查看源地址和目的地址而已
void DecodeIPPacket(char *pData)
{
IPHeader *pIPHdr = (IPHeader*)pData;
in_addr source, dest;
char szSourceIp[32], szDestIp[32]; printf("\n\n-------------------------------\n"); // 从IP头中取出源IP地址和目的IP地址
source.S_un.S_addr = pIPHdr->ipSource;
dest.S_un.S_addr = pIPHdr->ipDestination;
strcpy(szSourceIp, ::inet_ntoa(source));
strcpy(szDestIp, ::inet_ntoa(dest)); printf(" %s -> %s \n", szSourceIp, szDestIp);
// IP头长度
int nHeaderLen = (pIPHdr->iphVerLen & 0xf) * sizeof(ULONG); switch(pIPHdr->ipProtocol)
{
case IPPROTO_TCP: // TCP协议
printf("TCP\n");
DecodeTCPPacket(pData + nHeaderLen);
break;
case IPPROTO_UDP:
printf("UDP\n");
break;
case IPPROTO_ICMP:
printf("ICMP\n");
break;
}
}