高分求一段网络编程的注释

来源:百度知道 编辑:UC知道 时间:2024/06/07 19:09:14
求注释,越详细越好:

第一部分:

#include <winsock2.h>
#include <windows.h>
#include <ws2tcpip.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib,"ws2_32.lib")
#define MAX_HOSTNAME_LAN 255
#define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)
#define MAX_ADDR_LEN 16
struct ipheader {
unsigned char ip_hl:4, ip_v:4; /* this means that each member is 4 bits */
unsigned char ip_tos;
unsigned short int ip_len;
unsigned short int ip_id;
unsigned short int ip_off;
unsigned char ip_ttl;
unsigned char ip_p;
unsigned short int ip_sum;
unsigned int ip_src;
unsigned int ip_dst;
}; /* total ip header length: 20 bytes (=160 bits) */
typedef struct tcpheader {
unsigned short int sport;
unsigned short int dport;
unsigned int th_seq;
unsigned int th_ack;
unsigned char th_x:4;
unsigned char th_off:4;
unsigned char Flags;

好像是一个混杂模式抓网络包的程序,一句话说不清。
没有什么特殊的,和基本的 winsock流程是一样的,先看一下winsock基础编程有帮助。

struct ipheader {
typedef struct tcpheader {
typedef struct udphdr {
这几个是 ip ,tcp ,udp 网络包的头结构了,随便一本网络的书上都有。

WSAStartup(MAKEWORD(2,1),&wsd); //初始化winsock了,winsock都是那几步
if ((sock = socket(AF_INET, SOCK_RAW, IPPROTO_IP))==SOCKET_ERROR)exit(1); //启用winsock了,winsock编程都是那几步 ,注意SOCK_RAW 类型表示混杂模式,也就是接收所有包就行了

gethostname(name, MAX_HOSTNAME_LAN); //获取本机ip

bind(sock, (SOCKADDR *)&sa, sizeof(sa)); //绑定ip端口了,这里绑定本机的,不是嗅探本地网络包吗,winsock编程都是那几步

while (1) //死循环,接收数据了,winsock编程都是那几步
{
memset(RecvBuf, 0, sizeof(RecvBuf));
recv(sock, RecvBuf, sizeof(RecvBuf), 0); //recv会一直中断等到数据到来,winsock编程都是那几步

if((pIpheader->ip_p)==IPPROTO_TCP&&lentcp!=0) 判断网络包类型,用不同的 包结构去解析了,

还是学一下普通的winsock编程知识吧,就看的懂了。