设置网卡混杂模式
2012-08-24 22:48
411 查看
关键API :ioctlsocket()
设置杂收模式 宏 #define SIO_RCVALL (0x80000000 | (0x18000000) | (1))
IP头:
typedef struct _IPHeader
{ //IP数据包头
BYTE Ver_HLen; //版本+报头长度
BYTE TOS; //服务类型
WORD TotalLen; //总长度
WORD ID; //标识
WORD Flag_Segment; //标志+片偏移
BYTE TTL; //生存周期
BYTE Protocol; //协议类型
WORD Checksum; //头部校验和
in_addr SrcIP; //源IP地址
in_addr DstIP; //目的IP地址
} IPHEADER;
TCP头:
typedef struct _TCPHEADER
{
unsigned short srcPort;//2个字节
unsigned short DestPort;//2个字节
unsigned int sequeceNo; //4 个字节 序号
unsigned int acAnswerNo; //4字节
unsigned char dataoffset;//布首长度
unsigned char flage;
unsigned short windows;
unsigned short checksum;
unsigned short urgentPointer;
}TCPHEADER;
流程 --》 创建socket --》bind 本地地址-》ioctlsocket()设置杂收模式---》recv 接收数据
大概就是这样,代码肯定有一点小bug 请大家批评指正
设置杂收模式 宏 #define SIO_RCVALL (0x80000000 | (0x18000000) | (1))
IP头:
typedef struct _IPHeader
{ //IP数据包头
BYTE Ver_HLen; //版本+报头长度
BYTE TOS; //服务类型
WORD TotalLen; //总长度
WORD ID; //标识
WORD Flag_Segment; //标志+片偏移
BYTE TTL; //生存周期
BYTE Protocol; //协议类型
WORD Checksum; //头部校验和
in_addr SrcIP; //源IP地址
in_addr DstIP; //目的IP地址
} IPHEADER;
TCP头:
typedef struct _TCPHEADER
{
unsigned short srcPort;//2个字节
unsigned short DestPort;//2个字节
unsigned int sequeceNo; //4 个字节 序号
unsigned int acAnswerNo; //4字节
unsigned char dataoffset;//布首长度
unsigned char flage;
unsigned short windows;
unsigned short checksum;
unsigned short urgentPointer;
}TCPHEADER;
流程 --》 创建socket --》bind 本地地址-》ioctlsocket()设置杂收模式---》recv 接收数据
unsigned int sinfferClass::_Run(LPVOID lpramra) { SOCKET s=socket(AF_INET,SOCK_RAW,IPPROTO_IP); int nRet=WSAGetLastError(); sockaddr_in sin; sin.sin_family=AF_INET; sin.sin_port=htons(0); sin.sin_addr.S_un.S_addr=inet_addr("192.168.0.100"); ::bind(s,(sockaddr *)&sin,sizeof(sin)); nRet=WSAGetLastError(); DWORD dwValue=1; ioctlsocket(s,SIO_RCVALL,&dwValue); nRet=WSAGetLastError(); char * pbuffer=new char[1024]; IPHEADER ip; TCPHEADER tcp; int nIPLen=sizeof(IPHEADER); int nTcpLen=sizeof(TCPHEADER); while(1) { memset(pbuffer,0,1024); nRet=recv(s,pbuffer,1024,0); int destPort=0; if (nRet>0) { memcpy(&ip,pbuffer,nIPLen); pbuffer=pbuffer+nIPLen; memcpy(&tcp,pbuffer,nTcpLen); destPort=ntohs(tcp.DestPort); TRACE(inet_ntoa(ip.SrcIP)); TRACE("----->"); TRACE(inet_ntoa(ip.DstIP)); memmove(pbuffer,pbuffer+20,nRet-40); } } return true; }
大概就是这样,代码肯定有一点小bug 请大家批评指正
相关文章推荐
- 设置网卡混杂模式
- liunx下设置网卡为混杂模式的命令
- ubuntu 设置网卡为混杂模式 以及网络配置命令
- 分享:设置网卡混杂模式
- 设置网卡混杂模式
- [原]linux下将网卡设置为混杂模式
- 设置网卡混杂模式
- Ubuntu设置网卡为混杂模式
- 判断和设置网卡的混杂模式
- 网卡模式设置为混杂模式
- 网卡混杂模式Promiscuous与linux上混杂模式的设置
- Linux下网卡混杂模式设置和取消
- 网卡混杂模式Promiscuous与linux上混杂模式的设置
- 设置网卡混杂模式
- X Chen笔记---Centos网卡设置混杂模式的方法
- ubuntu 设置网卡为混杂模式 以及网络配置命令
- 设置网卡为混杂模式
- 设置网卡混杂模式
- 设置网卡混杂模式实现方法
- 设置网卡混杂模式