天嵌二次封装库使用手册  V1.0
tq_network.h 文件参考
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <netdb.h>
#include <net/if.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <signal.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <netinet/ip_icmp.h>
#include <sys/time.h>
#include <termios.h>
#include <sys/un.h>
#include <stddef.h>
#include <time.h>
#include <fcntl.h>
#include <poll.h>
#include <limits.h>
#include <netinet/in.h>
#include <error.h>
#include <net/route.h>
#include <net/if_arp.h>
tq_network.h 的引用(Include)关系图:
此图展示该文件直接或间接的被哪些文件引用了:

浏览源代码.

宏定义

#define MAC_SIZE   18
 MAC地址的大小
 
#define IP_SIZE   16
 IP地址的大小
 
#define BUFSIZE   1500
 各种缓冲区的长度
 
#define DATA_LEN   56
 ICMP回显请求的长度
 
#define ETHER_ADDR_LEN   6
 Ethernet地址长度
 
#define UP   1
 打开网卡标志
 
#define DOWN   0
 关闭网卡标志
 

函数

int get_ip_by_domain (const char *trgtadd, char *ip, int size)
 根据域名获取默认网卡设备的ip地址 更多...
 
int get_ip (char *dev, char *ip, int size)
 获取指定网卡设备的ip地址 更多...
 
int get_ip_info (char const *device, char *ip)
 获取指定网卡设备的ip地址 更多...
 
int get_netmask (char *dev, char *mask, int size)
 获取指定网卡设备的子网掩码 更多...
 
int get_gateway (char *dev, char *gway, int size)
 获取指定网卡设备的网关 更多...
 
int get_mac (char *dev, char *mac, int size)
 获取指定网卡设备的mac地址 更多...
 
int get_dns (char *dns1, int size1, char *dns2, int size2)
 获取本机指定的DNS服务器地址 更多...
 
int check_ping (const char *target, unsigned int timeout_ms)
 网络检测函数,类似于ping命令 更多...
 
int check_ping2 (const char *iface, const char *target, unsigned int timeout_ms)
 网络检测函数,类似于ping命令(指定端口) 更多...
 
int detect_eth_cable (char *ifname)
 网卡状态检测 更多...
 
int SetIfAddr (char *ifname, char *Ipaddr, char *mask)
 设置网卡IP地址 子网掩码 网关等信息 更多...
 
int set_mac_addr (char *ifname, char *mac)
 设置网卡MAC地址 更多...
 
int set_gateway (char *ifname, char *gateway)
 设置网卡IP地址 子网掩码 网关等信息 更多...
 
int set_dns (char *dns1, char *dns2)
 设置本机DNS服务器地址,DNS地址如114.114.114.114 更多...
 
int if_updown (char *ifname, int flag)
 打开关闭网卡 更多...
 
int ether_atoe (const char *a, unsigned char *e)
 将以太网地址串表示转换为二进制数据 更多...
 
char * ether_etoa (const unsigned char *e, char *a)
 将以太网地址二进制数据转换为字符串表示形式 更多...
 
void udhcpc (char *net_interface)
 用udhcpc获取ip地址 更多...
 

详细描述

作者
zhengchuangyong (zheng.nosp@m.chua.nosp@m.ngyon.nosp@m.g@em.nosp@m.bedsk.nosp@m.y.ne.nosp@m.t)
版本
1.0
日期
2021-09-13
修改日志:
Date Version Author Description
2021-09-13 1.0 zhengchuangyong 第一次发布,对网络相关的一些进行封装,如获取和设置ip地址、子网掩码、网关,检测网络状态等。

函数说明

int check_ping ( const char *  target,
unsigned int  timeout_ms 
)

网络检测函数,类似于ping命令

参数
target目标地址域名或者ip
timeout_ms检测超时(毫秒);ps:用于获取网络的返回信息(参考ping命令的返回信息),详见结构体struct ping_struct该参数也可以不传入,设置为NULL即可。如: check_ping(&target,timeout_ms,NULL);
返回
int 成功返回大于0,超时返回等于0,失败返回-1。不受ps参数影响
int check_ping2 ( const char *  iface,
const char *  target,
unsigned int  timeout_ms 
)

网络检测函数,类似于ping命令(指定端口)

参数
iface网口名称,如“eth0”
target目标地址域名或者 ip
timeout_ms检测超时(毫秒)
返回
int 成功返回大于0,超时返回等于0,失败返回-1。
int detect_eth_cable ( char *  ifname)

网卡状态检测

参数
ifname网卡名称,例:eth0、wlan0
返回
int up返回true(1), down返回false(0)
int ether_atoe ( const char *  a,
unsigned char *  e 
)

将以太网地址串表示转换为二进制数据

参数
a字符串形式为xx:xx:xx:xx:xx:xx
e二进制数据
返回
int 如果转换成功则为TRUE,否则为FALSE
char* ether_etoa ( const unsigned char *  e,
char *  a 
)

将以太网地址二进制数据转换为字符串表示形式

参数
e二进制数据
a字符串形式为xx:xx:xx:xx:xx:xx
返回
char* 成功返回指向a的指针
int get_dns ( char *  dns1,
int  size1,
char *  dns2,
int  size2 
)

获取本机指定的DNS服务器地址

参数
dns1DNS1地址缓存区
size1DNS1地址缓存区长度
dns2DNS2地址缓存区
size1DNS2地址缓存区长度
返回
若返回0则成功。返回-2则是因为DNS缓存区长度不足,需要的最小长度为16。

DNS缓存区传入函数前需要先初始化。

int get_gateway ( char *  dev,
char *  gway,
int  size 
)

获取指定网卡设备的网关

参数
dev网卡设备名
gway获取后的网关填充位置
size传入gway的大小
返回
int 成功返回填充gway的长度, >0 成功,填充gway的长度, =0 没有找到设备节点, -1 失败,无该设备节点, -2 形参gway的空间长度不够,需要的最小长度见返回gway的首字节
int get_ip ( char *  dev,
char *  ip,
int  size 
)

获取指定网卡设备的ip地址

参数
dev网卡设备名
ip获取后的ip填充位置
size传入ip的大小
返回
int 成功返回填充ip的长度, >0 成功,填充ip的长度, =0 没有找到设备节点, -1 失败,无该设备节点, -2 形参ip的空间长度不够,需要的最小长度见返回ip的首字节
int get_ip_by_domain ( const char *  trgtadd,
char *  ip,
int  size 
)

根据域名获取默认网卡设备的ip地址

参数
trgtadd域名
ip获取后的ip填充位置
size传入ip的大小
返回
int 成功返回填充ip的长度, >0 成功,填充ip的长度, =0 没有找到设备节点, -1 失败,无该设备节点, -2 形参ip的空间长度不够,需要的最小长度见返回ip的首字节
int get_ip_info ( char const *  device,
char *  ip 
)

获取指定网卡设备的ip地址

参数
dev网卡设备名
ip获取后的ip填充位置,接口不创建大小,需要外部创建内存空间
返回
若返回0则成功。返回-1则失败.
int get_mac ( char *  dev,
char *  mac,
int  size 
)

获取指定网卡设备的mac地址

参数
dev网卡设备名
mac获取后的mac填充位置
size传入mac的大小
返回
int 成功返回填充mac的长度, >0 成功,填充mac的长度, =0 没有找到设备节点, -1 失败,无该设备节点, -2 形参mac的空间长度不够,需要的最小长度见返回mac的首字节
int get_netmask ( char *  dev,
char *  mask,
int  size 
)

获取指定网卡设备的子网掩码

参数
dev网卡设备名
mask获取后的子网掩码填充位置
size传入mask的大小
返回
int 成功返回填充mask的长度, >0 成功,填充mask的长度, =0 没有找到设备节点, -1 失败,无该设备节点, -2 形参mask的空间长度不够,需要的最小长度见返回mask的首字节
int if_updown ( char *  ifname,
int  flag 
)

打开关闭网卡

参数
ifname网卡名称,例:eth0、wlan0
flag网卡状态,0:关闭网卡,1:打开网卡
返回
int 成功返回大于等于0,失败返回小于0
int set_dns ( char *  dns1,
char *  dns2 
)

设置本机DNS服务器地址,DNS地址如114.114.114.114

参数
dns1DNS1服务器地址
dns2DNS2服务器地址
返回
int 若成功则返回非负整数。

设置DNS地址实际是对/etc/resolv.conf文件进行读写,在写入DNS地址前会将文件截断为零长度。

int set_gateway ( char *  ifname,
char *  gateway 
)

设置网卡IP地址 子网掩码 网关等信息

参数
ifname网卡名称,例:eth0、wlan0
gateway网关地址,例:192.168.1.2
返回
int 成功返回等于0,失败返回小于0
int set_mac_addr ( char *  ifname,
char *  mac 
)

设置网卡MAC地址

参数
ifname网卡名称,例:eth0、wlan0
macMAC地址,注意:mac地址参数为binary data数据,使用ether_etoa转换成标准的MAC地址字符串格式
返回
int 成功返回大于等于0,失败返回小于0
int SetIfAddr ( char *  ifname,
char *  Ipaddr,
char *  mask 
)

设置网卡IP地址 子网掩码 网关等信息

参数
ifname网卡名称,例:eth0、wlan0
IpaddrIP地址,例:192.168.1.96
mask子网掩码,例:255.255.255.0
返回
int 成功返回等于0,失败返回小于0
void udhcpc ( char *  net_interface)

用udhcpc获取ip地址

参数
net_interface设备节点名称,如"wlan0"