端口 抓包 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数据