Those who know how to use raw socket to do a sniff , can help me ?
-
#include <winsock2.h> #include <ws2tcpip.h> #include <stdio.h> #define SIO_RCVALL _WSAIOW(IOC_VENDOR,1) #define BUFFER_SIZE 65535 #pragma comment(lib, "ws2_32.lib") #define PROTOCOL_STRING_ICMP_TXT "ICMP" #define PROTOCOL_STRING_TCP_TXT "TCP" #define PROTOCOL_STRING_UDP_TXT "UDP" #define PROTOCOL_STRING_SPX_TXT "SPX" #define PROTOCOL_STRING_NCP_TXT "NCP" #define PROTOCOL_STRING_UNKNOW_TXT "UNKNOW" //…… char* GetProtocolTxt(int Protocol) { switch (Protocol){ case IPPROTO_ICMP : //1 /* control message protocol */ return PROTOCOL_STRING_ICMP_TXT; case IPPROTO_TCP : //6 /* tcp */ return PROTOCOL_STRING_TCP_TXT; case IPPROTO_UDP : //17 /* user datagram protocol */ return PROTOCOL_STRING_UDP_TXT; default: return PROTOCOL_STRING_UNKNOW_TXT; } } typedef struct _TCP{ WORD SrcPort; // 源端口 WORD DstPort; // 目的端口 DWORD SeqNum; // 顺序号 DWORD AckNum; // 确认号 BYTE DataOff; // TCP头长 BYTE Flags; // 标志(URG、ACK等) WORD Window; // 窗口大小 WORD Chksum; // 校验和 WORD UrgPtr; // 紧急指针 } TCP; typedef TCP *LPTCP; typedef TCP UNALIGNED * ULPTCP; typedef struct _IP{ union{ BYTE Version; // 版本 BYTE HdrLen; // IHL }; BYTE ServiceType; // 服务类型 WORD TotalLen; // 总长 WORD ID; // 标识 union{ WORD Flags; // 标志 WORD FragOff; // 分段偏移 }; BYTE TimeToLive; // 生命期 BYTE Protocol; // 协议 WORD HdrChksum; // 头校验和 DWORD SrcAddr; // 源地址 DWORD DstAddr; // 目的地址 BYTE Options; // 选项 } IP; typedef IP * LPIP; typedef IP UNALIGNED * ULPIP; void main() { WSADATA WSAData; SOCKET sock; BOOL flag=true; char LocalName[16]; struct hostent *pHost; struct sockaddr_in addr_in; char RecvBuf[BUFFER_SIZE]; IP ip; TCP tcp; /////////////////////////////////////////////////////////////有问题!!!!!!!!! // 检查 Winsock 版本号,WSAData为WSADATA结构对象 WSAStartup(MAKEWORD(2, 2), &WSAData);
-
#include <winsock2.h> #include <ws2tcpip.h> #include <stdio.h> #define SIO_RCVALL _WSAIOW(IOC_VENDOR,1) #define BUFFER_SIZE 65535 #pragma comment(lib, "ws2_32.lib") #define PROTOCOL_STRING_ICMP_TXT "ICMP" #define PROTOCOL_STRING_TCP_TXT "TCP" #define PROTOCOL_STRING_UDP_TXT "UDP" #define PROTOCOL_STRING_SPX_TXT "SPX" #define PROTOCOL_STRING_NCP_TXT "NCP" #define PROTOCOL_STRING_UNKNOW_TXT "UNKNOW" //…… char* GetProtocolTxt(int Protocol) { switch (Protocol){ case IPPROTO_ICMP : //1 /* control message protocol */ return PROTOCOL_STRING_ICMP_TXT; case IPPROTO_TCP : //6 /* tcp */ return PROTOCOL_STRING_TCP_TXT; case IPPROTO_UDP : //17 /* user datagram protocol */ return PROTOCOL_STRING_UDP_TXT; default: return PROTOCOL_STRING_UNKNOW_TXT; } } typedef struct _TCP{ WORD SrcPort; // 源端口 WORD DstPort; // 目的端口 DWORD SeqNum; // 顺序号 DWORD AckNum; // 确认号 BYTE DataOff; // TCP头长 BYTE Flags; // 标志(URG、ACK等) WORD Window; // 窗口大小 WORD Chksum; // 校验和 WORD UrgPtr; // 紧急指针 } TCP; typedef TCP *LPTCP; typedef TCP UNALIGNED * ULPTCP; typedef struct _IP{ union{ BYTE Version; // 版本 BYTE HdrLen; // IHL }; BYTE ServiceType; // 服务类型 WORD TotalLen; // 总长 WORD ID; // 标识 union{ WORD Flags; // 标志 WORD FragOff; // 分段偏移 }; BYTE TimeToLive; // 生命期 BYTE Protocol; // 协议 WORD HdrChksum; // 头校验和 DWORD SrcAddr; // 源地址 DWORD DstAddr; // 目的地址 BYTE Options; // 选项 } IP; typedef IP * LPIP; typedef IP UNALIGNED * ULPIP; void main() { WSADATA WSAData; SOCKET sock; BOOL flag=true; char LocalName[16]; struct hostent *pHost; struct sockaddr_in addr_in; char RecvBuf[BUFFER_SIZE]; IP ip; TCP tcp; /////////////////////////////////////////////////////////////有问题!!!!!!!!! // 检查 Winsock 版本号,WSAData为WSADATA结构对象 WSAStartup(MAKEWORD(2, 2), &WSAData);
I write the sentence "printf("haha\n");" to debug the program !!! But the recv method can't return an value , and nothing to do but wait. How to solve it ? And why it will perform like that??? Thank you very much!!! :-O Jeff Fan No change is the worst!!! The principal of mine msn:fyr000000@hotmail.com If you like coding , add me.
-
I write the sentence "printf("haha\n");" to debug the program !!! But the recv method can't return an value , and nothing to do but wait. How to solve it ? And why it will perform like that??? Thank you very much!!! :-O Jeff Fan No change is the worst!!! The principal of mine msn:fyr000000@hotmail.com If you like coding , add me.
If dont want Recv to be blocked, use fcntl call to set the time out. So that Recv will not block and wait.
-
#include <winsock2.h> #include <ws2tcpip.h> #include <stdio.h> #define SIO_RCVALL _WSAIOW(IOC_VENDOR,1) #define BUFFER_SIZE 65535 #pragma comment(lib, "ws2_32.lib") #define PROTOCOL_STRING_ICMP_TXT "ICMP" #define PROTOCOL_STRING_TCP_TXT "TCP" #define PROTOCOL_STRING_UDP_TXT "UDP" #define PROTOCOL_STRING_SPX_TXT "SPX" #define PROTOCOL_STRING_NCP_TXT "NCP" #define PROTOCOL_STRING_UNKNOW_TXT "UNKNOW" //…… char* GetProtocolTxt(int Protocol) { switch (Protocol){ case IPPROTO_ICMP : //1 /* control message protocol */ return PROTOCOL_STRING_ICMP_TXT; case IPPROTO_TCP : //6 /* tcp */ return PROTOCOL_STRING_TCP_TXT; case IPPROTO_UDP : //17 /* user datagram protocol */ return PROTOCOL_STRING_UDP_TXT; default: return PROTOCOL_STRING_UNKNOW_TXT; } } typedef struct _TCP{ WORD SrcPort; // 源端口 WORD DstPort; // 目的端口 DWORD SeqNum; // 顺序号 DWORD AckNum; // 确认号 BYTE DataOff; // TCP头长 BYTE Flags; // 标志(URG、ACK等) WORD Window; // 窗口大小 WORD Chksum; // 校验和 WORD UrgPtr; // 紧急指针 } TCP; typedef TCP *LPTCP; typedef TCP UNALIGNED * ULPTCP; typedef struct _IP{ union{ BYTE Version; // 版本 BYTE HdrLen; // IHL }; BYTE ServiceType; // 服务类型 WORD TotalLen; // 总长 WORD ID; // 标识 union{ WORD Flags; // 标志 WORD FragOff; // 分段偏移 }; BYTE TimeToLive; // 生命期 BYTE Protocol; // 协议 WORD HdrChksum; // 头校验和 DWORD SrcAddr; // 源地址 DWORD DstAddr; // 目的地址 BYTE Options; // 选项 } IP; typedef IP * LPIP; typedef IP UNALIGNED * ULPIP; void main() { WSADATA WSAData; SOCKET sock; BOOL flag=true; char LocalName[16]; struct hostent *pHost; struct sockaddr_in addr_in; char RecvBuf[BUFFER_SIZE]; IP ip; TCP tcp; /////////////////////////////////////////////////////////////有问题!!!!!!!!! // 检查 Winsock 版本号,WSAData为WSADATA结构对象 WSAStartup(MAKEWORD(2, 2), &WSAData);
I have known why , if somebody want to know , can go to this link http://www.codeguru.com/forum/showthread.php?t=384592 Jeff Fan No change is the worst!!! The principal of mine msn:fyr000000@hotmail.com If you like coding , add me.