1、创建并初始化Socket
a.载入ws2_32.dll,并获得相应的Socket函数地址;
b.调用FWSAStartup初始化Socket;
2、取得当前机器的IP;
3、设置网卡状态(函数WSAIoctl);
4、通知Socket有请求事件发生(函数WSAAsyncSelect)
5、截获消息触发相应事件;
6、通过函数recv得到数据包
recv(Fsocket[socket_no], RecvBuf, sizeof(RecvBuf), 0);
7、进行IP解包,分析包中的内容。
根据以下内容
IP分包分析
封│ |------用户数据--------------------| ↑解
包│ |--APP--|------用户数据--------------------| │包
顺│ |**TCP包头**|--------------应用数据--------------------| │顺
序↓ |&&IP包头&&|**TCP包头**|--------------应用数据--------------------| │序
各包头分析如下。
IP头
type
_iphdr = record
h_lenver : byte; //4位首部长度+4位IP版本号
tos : char; //8位服务类型TOS
total_len : char; //16位总长度(字节)
ident : word; //16位标识
frag_and_flags : word; //3位标志位
ttl : byte; //8位生存时间 TTL
proto : byte; //8位协议 (TCP, UDP 或其他)
checksum : word; //16位IP首部校验和
sourceIP : Longword; //32位源IP地址
destIP : Longword; //32位目的IP地址
end;
TCP头
type
_tcphdr=record //定义TCP首部
TCP_Sport : word; //16位源端口
TCP_Dport : word; //16位目的端口
th_seq : longword; //32位序列号
th_ack : longword; //32位确认号
th_lenres : byte; //4位首部长度/6位保留字
th_flag : char; //6位标志位
th_win : word; //16位窗口大小
th_sum : word; //16位校验和
th_urp : word; //16位紧急数据偏移量
end;