首先获取原始socket,SOCK_RAW越过TCP层直接读取IP数据包,linux unix下使用SOCK_PACKET捕获链路层数据包。
int sock = socket(AF_INET,SOCK_RAW,IPPROTO_TCP);
char buffer[65535];
struct sockaddr_in from;
recvfrom(sock,buffer,sizeof(buffer),0,(struct sockaddr *)&from,&fromlen);
OK,数据保存在buffer中,from为数据源地址。