首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

端口 抓包 UDP。帮忙编译出来。高分悬赏!解决办法

2012-02-28 
端口 抓包 UDP。帮忙编译出来。高分悬赏!需要:抓包》》from自本地 6112端口 to 255.255.255.255:6112的所有UDP

端口 抓包 UDP。帮忙编译出来。高分悬赏!
需要:
 抓包》》from自本地 6112端口 to 255.255.255.255:6112 的所有UDP包
  返回byte[]

我现在有部分代码:

C/C++ code
我要的数组 getbyte(){        DWORD dwFlags;    DWORD dwBytesRead;    WSABUF wbuf;    char buf[0x1500];    wbuf.len =0x1500;    wbuf.buf=buf;    int k=0; // InitSocket();    WORD wReqVer = MAKEWORD(2, 2);    WSADATA wsa;    if(::WSAStartup(wReqVer, &wsa))return NULL;//           m_sock=::WSASocket(AF_INET,SOCK_DGRAM,IPPROTO_UDP,NULL,0,WSA_FLAG_OVERLAPPED);          if (m_sock==INVALID_SOCKET) return NULL;        //绑定    SOCKET_ADDRESS_LIST *slist=NULL;    char buff[2048];    DWORD dwBytesRet2;    SOCKADDR_IN if0;    if (SOCKET_ERROR==WSAIoctl(m_sock,SIO_ADDRESS_LIST_QUERY,        NULL,0,buff,2048,&dwBytesRet2,NULL,NULL))        return NULL;    slist=(SOCKET_ADDRESS_LIST *)buf;    if (slist->iAddressCount<=0) return NULL;    if0.sin_addr.s_addr =         ((SOCKADDR_IN *)slist->Address[0].lpSockaddr)->sin_addr.s_addr;        if0.sin_family=AF_INET;    if0.sin_port =htons(0);    if(SOCKET_ERROR == ::bind(m_sock, (SOCKADDR *)&if0, sizeof(if0)))        return NULL;      //                DWORD dwVal=1;                DWORD dwBytesRet;          if (SOCKET_ERROR==WSAIoctl(m_sock, SIO_RCVALL, &dwVal,                sizeof(dwVal), NULL, 0, &dwBytesRet, NULL, NULL)) return NULL;         while(true)    {        dwFlags=0;        WSARecv(m_sock , &wbuf, 1, &dwBytesRead, &dwFlags, NULL, NULL);        wbuf.len=dwBytesRead;        WSABUF* pBuf = (WSABUF *)&wbuf;                UCHAR* buf = (UCHAR *)pBuf->buf;        buf = (UCHAR *)::GlobalAlloc(GPTR, pBuf->len);                 memcpy(buf, pBuf->buf, pBuf->len);            WSABUF *pbuf = new WSABUF;            pbuf->buf = (char *)buf;            pbuf->len = pBuf->len;            if( 判断我的条件   ){        printf("源IP:%d.%d.%d.%d  ",buf[12], buf[13], buf[14], buf[15]);        printf("目的IP:%d.%d.%d.%d\n",buf[16], buf[17], buf[18], buf[19]);        return  我要的数组                }                }}


[解决办法]
这样抓包不知道会不会影响正常进程的数据接收。

上面程序抓到的是一个IP数据包,其中buf[9]是IP包类型,0x11十进制17就是UDP数据

buf[12], buf[13], buf[14], buf[15] 源IP

buf[16], buf[17], buf[18], buf[19] 目的IP

buf[20], buf[21] 源端口 buf[22], buf[23] 目的端口

buf[28] 开始就是UDP数据

热点排行