# Include <winsock2.h>
# Include <stdio. h>
// # Include <mstcpip. h>
/* If this clause is added, the following message is not displayed: no definition is set for sio_rcvall */
# Define sio_rcvall _ wsaiow (ioc_vendor, 1)
# Pragma comment (Lib, "ws2_32 ")
Void decodeippacket (char * pdata );
Typedef struct _ tcpheader
{
Ushort sourceport;
Ushort destinationport;
Ulong sequencenumber;
Ulong acknowledgenumber;
Ulong dataoffset;
Uchar flags;
Ushort windows;
Ushort checksum;
Ushort urgentpointer;
} Tcpheader, * ptcpheader;
Void main ()
{
/*
Wsadata;
If (wsastartup (makeword (2, 2), wsadata )! = 0)
{
Return;
}
*/
Char buff [1024];
Int nret;
DWORD dwvalue = 1;
Socket Sraw = socket (af_inet, sock_raw, ipproto_ip );
Char szhostname [56];
Sockaddr_in addr_in;
Struct hostent * phost;
Gethostname (szhostname, 56 );;
Phost = gethostbyname (char *) szhostname );
If (phost = 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 );
Printf ("binding to interface: % s/n", inet_ntoa (addr_in.sin_addr ));
If (BIND (Sraw, (psockaddr) & addr_in, sizeof (addr_in) = socket_error)
Return;
If (ioctlsocket (Sraw, sio_rcvall, & dwvalue )! = 0)
Return;
While (true)
{
Nret = Recv (Sraw, buff, 1024, 0 );
If (nret> 0)
{
Decodeippacket (buff );
}
}
}
Void decodeippacket (char * pdata)
{
Tcpheader * ptcphdr = (tcpheader *) pdata;
Printf ("port: % d-> % d/N", ntohs (ptcphdr-> sourceport), ntohs (ptcphdr-> destinationport ));
}
But why didn't I sniff the data? Strange.