1、使用PCAP_OPENFLAG_PROMISCUOUS必须#define HAVE_REMOTE,否则编译报错。
pcap_open(d->name,65535,PCAP_OPENFLAG_PROMISCUOUS,1000,NULL,errorBuf)
2、常用结构
在windows/linux下有下面结构:
sockaddr结构--------这个结构不常用一般sockaddr_in
struct sockaddr {
unsigned short sa_family; /* address family, AF_xxx */
char sa_data[14]; /* 14 bytes of protocol address */
};
sockaddr_in结构(在netinet/in.h中定义):
struct sockaddr_in {
short sin_family; /* Address family */
unsigned short sin_port; /* Port number */
struct in_addr sin_addr; /* Internet address */
unsigned char sin_zero[8]; /* Same size as struct sockaddr */
};
在linux下:
in_addr结构
typedef struct in_addr{
unsigned long s_addr;
};
在windows下:
typedef struct in_addr {
union {
struct{
unsigned char s_b1,
s_b2,
s_b3,
s_b4;
} S_un_b;
struct{
unsigned short s_w1,
s_w2;
} S_un_w;
unsigned long S_addr;
}S_un;
} IN_ADDR;
3、常用到的函数:
inet_addr
功能:将一个点分十进制的IP转换成一个长整数型数(u_long类型)
原型:in_addr_t inet_addr(const char *cp);
参数:字符串,一个点分十进制的IP地址
头文件:Winsock2.h
链接库:Ws2_32.lib
inet_ntoa
函数声明:char *inet_ntoa (struct in_addr);
返回点分十进制的字符串在静态内存中的指针。
函数功能:将网络地址转换成“.”点隔的字符串格式。
所需库: winsock.h
4、将一个(字符串,一个点分十进制的IP地址)型到u_long型再到(字符串,一个点分十进制的IP地址)型
struct in_addr addr;
u_long ip_protocol->ipv4_sourpa=inet_addr("192.168.1.165");
memcpy(&addr,&ip_protocol->ipv4_sourpa,4);//内存数据复制
inet_ntoa(addr);
网络编程笔记
最新推荐文章于 2022-05-06 00:07:35 发布