不清楚的问题:
1)
SOCKET m_s;
m_s = socket( AF_INET , SOCK_RAW , IPPROTO_IP ) ;
初始化m_s时,将第二个参数设成SOCK_RAW ,便可以将套接字绑定到网卡上是吗?
然后用recv函数接收到的数据便是IP包对吗?
2)
这是VCKBASE里的一个例子,不清楚下面的结构的由来
typedef struct _IPHEADER {
unsigned char header_len:4;
unsigned char version:4;
unsigned char tos; // type of service
unsigned short total_len; // length of the packet
unsigned short ident; // unique identifier
unsigned short flags;
unsigned char ttl;
unsigned char proto; // protocol ( IP , TCP, UDP etc)
unsigned short checksum;
unsigned int sourceIP;
unsigned int destIP;}IPHEADER;struct TCPPacketHead {
WORD SourPort;
WORD DestPort;
DWORD SeqNo;
DWORD AckNo;
BYTE HLen;
BYTE Flag;
WORD WndSize;
WORD ChkSum;
WORD UrgPtr;
};
1)
SOCKET m_s;
m_s = socket( AF_INET , SOCK_RAW , IPPROTO_IP ) ;
初始化m_s时,将第二个参数设成SOCK_RAW ,便可以将套接字绑定到网卡上是吗?
然后用recv函数接收到的数据便是IP包对吗?
2)
这是VCKBASE里的一个例子,不清楚下面的结构的由来
typedef struct _IPHEADER {
unsigned char header_len:4;
unsigned char version:4;
unsigned char tos; // type of service
unsigned short total_len; // length of the packet
unsigned short ident; // unique identifier
unsigned short flags;
unsigned char ttl;
unsigned char proto; // protocol ( IP , TCP, UDP etc)
unsigned short checksum;
unsigned int sourceIP;
unsigned int destIP;}IPHEADER;struct TCPPacketHead {
WORD SourPort;
WORD DestPort;
DWORD SeqNo;
DWORD AckNo;
BYTE HLen;
BYTE Flag;
WORD WndSize;
WORD ChkSum;
WORD UrgPtr;
};
tcp/ip协议中有IP头,TCP头,UDP头等,我的意思是以上的结构在库中有没有定义
{
unsigned char h_verlen; //4位首部长度,4位IP版本号
unsigned char tos; //8位服务类型TOS
unsigned short total_len; //16位总长度(字节)
unsigned short ident; //16位标识
unsigned short frag_and_flags; //3位标志位
unsigned char ttl; //8位生存时间 TTL
unsigned char proto; //8位协议 (TCP, UDP 或其他)
unsigned short checksum; //16位IP首部校验和
unsigned int sourceIP; //32位源IP地址
unsigned int destIP; //32位目的IP地址
}IPHEADER;
{
USHORT th_sport; //16位源端口
USHORT th_dport; //16位目的端口
unsigned int th_seq; //32位序列号
unsigned int th_ack; //32位确认号
unsigned char th_lenres; //4位首部长度/6位保留字
unsigned char th_flag; //6位标志位
USHORT th_win; //16位窗口大小
USHORT th_sum; //16位校验和
USHORT th_urp; //16位紧急数据偏移量
}TCPHEADER;
请详谈。
另外还有问题,我如果要拷贝一个文本文件到LAN中的某一台机器中,那截取的包数据,是否是文本文件的内容?我已经实现了用RAW SOCKET截取网卡数据包的功能没,但是有些地方弄不明白,我发现截取的数据并不是所传的数据,都是乱码,怎么会事?多谢帮助
你说的意思是,即使我传一个文本文件到LAN中的某台机器,也截取不到该文本文件的内容是吗?
tcp头中还有一个数据字段,但是在声明TCP头结构时,并没有该成员。
IP头 TCP头(或其他信息头) 数据 数据在从应用层到达传输层时,将添加TCP数据段头,或是UDP数据段头。
我有个想法,我们公司现在上网是ADSL,一台是代理服务器,代理服务器软件可以监视每台机器的上网记录,我想将网卡IP包截取,然后修改,这样代理服务器软件无法记录本台机器的上网记录,可以吗?
详谈.等待。
wltsui:我要下线了,明天在向你请教。