linux 系统获取网络ip, mask, gateway, dns信息小程序
net_util.c
#define WIRED_DEV "eth0"
#define WIRELESS_DEV "ra0"
#define PPPOE_DEV "ppp0"
#define DEBUG_PRT(fmt, arg...) printf(fmt,##arg)
/**
* get ip address.
* @param net_dev net device.
* @param ipaddr a pointer to save ip address.
* @return 0 success, or fail.
*/
int get_ipaddr(const char *net_dev, char *ipaddr)
{
struct ifreq ifr;
int fd = 0;
struct sockaddr_in *pAddr;
if((NULL == net_dev) || (NULL == ipaddr))
{
DEBUG_PRT("illegal call function SetGeneralIP! \n");
return -1;
}
if((fd = socket(AF_INET,SOCK_DGRAM,0)) < 0)
{
DEBUG_PRT("open socket failed \n");
return -1;
}
memset(&ifr,0,sizeof(ifr));
strcpy(ifr.ifr_name, net_dev);
if(ioctl(fd, SIOCGIFADDR, &ifr) < 0)
{
DEBUG_PRT("SIOCGIFADDR socket failed \n");
close(fd);
return -1;
}
pAddr = (struct sockaddr_in *)&(ifr.ifr_addr);
strcpy(ipaddr, inet_ntoa(pAddr->sin_addr));
close(fd);
return 0;
}
/**
* get gateway.
* @param gateway a pointer to save geteway.
* @return none.
*/
void get_gateway(ITI_CHAR *gateway)
{
char buf[1024]={0};
char *p = NULL;
char *q = NULL;
int count = 0;
if(NULL == gateway)
{
DEBUG_PRT("gateway is NULL \n");
return;
}
cmd_run("route | grep default", buf, 1024);
if(0 == strlen(buf))
{
DEBUG_PRT("get gateway error \n");
return;
}
p = strstr2(buf, "default");
q = p;
while(*q == ' ')
{
q++;
}
p = q;
while(*p != ' ')
{
p++;
count++;
}
if(NULL != q)
{
memcpy(gateway, q, count);
}
gateway[count] = '\0';
}
/**
* get mask.
* @param net_dev net device.
* @param mask a pointer to save mask.
* @return none.
*/
void get_mask(const char *net_dev, ITI_CHAR *mask)
{
char buf[1024]={0};
char *p = NULL;
if(NULL == mask)
{
DEBUG_PRT("mask is NULL \n");
return;
}
if(0 == (memcmp(WIRED_DEV, net_dev, sizeof(WIRED_DEV))))
{
cmd_run("ifconfig eth0 | grep Mask", buf, 1024);
}
else if(0 == (memcmp(WIRELESS_DEV, net_dev, sizeof(WIRELESS_DEV))))
{
cmd_run("ifconfig ra0 | grep Mask", buf, 1024);
}
else if(0 == (memcmp(PPPOE_DEV, net_dev, sizeof(PPPOE_DEV))))
{
cmd_run("ifconfig ppp0 | grep Mask", buf, 1024);
}
else
{
DEBUG_PRT("net device not support \n");
return;
}
if(0 == strlen(buf))
{
DEBUG_PRT("get mask error \n");
return;
}
p = strstr2(buf, "Mask:");
if(NULL == p)
{
DEBUG_PRT("get mask error \n");
return;
}
strcpy(mask, p);
}
/**
* get dns.
* @param dns1 a pointer to save first dns.
* @param dns2 a pointer to save second dns.
* @return 0 success, or fail.
*/
int get_dns(char *dns1, char *dns2)
{
int fd = -1;
int size = 0;
char strBuf[100];
char tmpBuf[100];
int buf_size = sizeof(strBuf);
char *p = NULL;
char *q = NULL;
int i = 0;
int j = 0;
int count = 0;
fd = open("/etc/resolv.conf", O_RDONLY);
if(-1 == fd)
{
DEBUG_PRT("%s open error \n", __func__);
return -1;
}
size = read(fd, strBuf, buf_size);
if(size < 0)
{
DEBUG_PRT("%s read file len error \n", __func__);
close(fd);
return -1;
}
strBuf[buf_size] = '\0';
close(fd);
while(i < buf_size)
{
if((p = strstr2(&strBuf[i], "nameserver")) != NULL)
{
j++;
p += 1;
count = 0;
memset(tmpBuf, 0xff, 100);
memcpy(tmpBuf, p, 100);
tmpBuf[sizeof(tmpBuf) -1 ] = '\0';
q = p;
while(*q != '\n')
{
q++;
count++;
}
i += (sizeof("nameserver") + count);
if(1 == j)
{
memcpy(dns1, p, count);
dns1[count]='\0';
}
else if(2 == j)
{
memcpy(dns2, p, count);
dns2[count]='\0';
}
}
else
{
i++;
}
}
return 0;
}
main.c
void main(void)
{
#define WIRED_DEV "eth0"
#define WIRELESS_DEV "ra0"
#define PPPOE_DEV "ppp0"
char buf[1024] = {'\0'};
extern int get_ipaddr(const char *net_dev, char *ipaddr);
get_ipaddr(WIRED_DEV, buf);
printf("get_ipaddr: %s \n", buf);
memset(buf, '\0', sizeof(buf));
extern void get_mask(const char *net_dev, ITI_CHAR *mask);
get_mask(WIRED_DEV, buf);
printf("get_mask: %s \n", buf);
memset(buf, '\0', sizeof(buf));
extern void get_gateway(ITI_CHAR *gateway);
get_gateway(buf);
printf("get_gateway: %s \n", buf);
memset(buf, '\0', sizeof(buf));
extern int get_dns(char *dns1, char *dns2);
get_dns(buf, &buf[100]);
printf("get_dns: %s %s\n", buf, &buf[100]);
memset(buf, '\0', sizeof(buf));
}
makefile:
gcc main.c net_util.c -o get_net_info
./get_net_info
运行结果:
get_ipaddr: 192.168.9.142
get_mask: 255.255.255.0
get_gateway: 192.168.9.254
get_dns: 192.168.9.11 192.168.9.10
为提高执行效率, 更新获取网关和子网掩码程序:
static void get_gateway(const char *net_dev, char *gateway)
{
FILE *fp;
char buf[1024];
char iface[16];
unsigned char tmp[100]={'\0'};
unsigned int dest_addr=0, gate_addr=0;
if(NULL == gateway)
{
DEBUG_PRT("gateway is NULL \n");
return;
}
fp = fopen("/proc/net/route", "r");
if(fp == NULL){
DEBUG_PRT("fopen error \n");
return;
}
fgets(buf, sizeof(buf), fp);
while(fgets(buf, sizeof(buf), fp))
{
if((sscanf(buf, "%s\t%X\t%X", iface, &dest_addr, &gate_addr) == 3)
&& (memcmp(net_dev, iface, strlen(net_dev)) == 0)
&& gate_addr != 0)
{
memcpy(tmp, (unsigned char *)&gate_addr, 4);
sprintf(gateway, "%d.%d.%d.%d", (unsigned char)*tmp, (unsigned char)*(tmp+1), (unsigned char)*(tmp+2), (unsigned char)*(tmp+3));
break;
}
}
fclose(fp);
}
static void get_mask(const char *net_dev, ITI_CHAR *mask)
{
struct sockaddr_in *pAddr;
struct ifreq ifr;
int sockfd;
sockfd = socket(AF_INET,SOCK_DGRAM,0);
memset(&ifr,0,sizeof(ifr));
strcpy(ifr.ifr_name, net_dev);
if(ioctl(sockfd, SIOCGIFNETMASK, &ifr) < 0){
DEBUG_PRT("SIOCGIFADDR socket failed \n");
close(sockfd);
return ;
}
pAddr = (struct sockaddr_in *)&(ifr.ifr_addr);
strcpy(mask, (char *)(inet_ntoa(pAddr->sin_addr)));
close(sockfd);
}
linux 系统获取网络ip, mask, gateway, dns信息小程序的更多相关文章
- 如何配置Linux系统的网络IP地址
一台安装了Linux系统的电脑如果想要联网,首先要做的就是进行网络配置.今天小编就以CentOS6.4系统为例为大家介绍整个网络配置的过程,虽然只是以CentOS6.4系统为例,但是其它的Linux系 ...
- (转)Linux系统基础网络配置老鸟精华篇
Linux系统基础网络配置老鸟精华篇 原文:http://blog.51cto.com/oldboy/784625 对于linux高手看似简单的网络配置问题,也许要说出所以然来也并不轻松,因此仍然有太 ...
- CentOS(六)--Linux系统的网络环境配置
Linux系统下的网络环境配置,Linux.Unix就是网络的世界,所以在Linux系统中如何配置网络环境变量是至关重要的,这里将会给出3种Linux系统下网络环境配置的方法! 在配置网络环境之前,首 ...
- Linux 系统的网络基础_【all】
网络基础 1.网线:568B: 白橙 橙色 白绿 蓝色 白蓝 绿色 白棕 棕色 2.交换机:电信号转发的网络设备,它可以为接入交换机的任2个网络节点设备提供电信号通信 3.路由器:连接局域网,广域网的 ...
- Linux系统基本网络配置之ifconfig命令
Linux系统基本网络配置之ifconfig命令 一.Linux系统的网络配置基本包括:网络IP的配置.网关路由的配置.主机DNS的配置.主机名的配置等,本篇注重介绍网络IP的配置. 二.Linux系 ...
- Linux系统之网络相关的命令
Linux系统之网络相关的命令 网络概述 网络:通过通信介质和通信设备 将分布不同地点的两台或多台计算机,经过相应的程序实现通信switch 交换机router 路由器网络的功能:数据通信:利用网络传 ...
- 获得Unix/Linux系统中的IP、MAC地址等信息
获得Unix/Linux系统中的IP.MAC地址等信息 中高级 | 2010-07-13 16:03 | 分类:①C语言. Unix/Linux. 网络编程 ②手册 | 4,471 次阅读 ...
- Linux系统NFS网络文件系统
Linux系统NFS网络文件系统 NFS(network file system)网络文件系统,就是通过网络让不同的主机系统之间可以共享文件或目录,此种方法NFS客户端使用挂载的方式让共享文件或目录到 ...
- Linux如何配置网络ip?
Linux如何配置网络ip? 1.首先切换至root用户 su root 输入root用户密码 2.借助dhclient工具自动生成一个网络内可用的ip地址 我们可以手动配置对应的网段的ip地址,但是 ...
随机推荐
- Redis与Memcached的比较
网络IO模型 Memcached 是多线程,非阻塞IO复用的网络模型,分为监听主线程和worker子线程,监听线程监听网络连接,接受请求后,将连接描述字pipe 传递给worker线程,进行读写IO, ...
- JS拖拽原理
实现拖拽效果主要跟鼠标的三个事件有关: onmousedown : 选择要拖拽的元素 onmousemove : 移动元素 onmouseup : 释放元素 三个事件的关系: obj.onmoused ...
- Android Studio API 文档_下载与使用
如何下载API 说明: 时间: 2016/7/9 根据百度经验步骤改编(百度经验), 但是比它更好, 亲测可用 1.1 下载API文档: 1.1.1 SDK Manager 1.1.2 1.1.3 ( ...
- iis7如何取消目录的可执行权限
我们需要把IIs中某一个目录的可执行权限去掉.这在IIs6中是非常方便的,可是因为iis7的机制小编也找了不少资料才找到. 第一步:先选择需要取消权限的目录,然后在右边可以看到 “处理程序映射” 双击 ...
- 【python】Windows安装Beautiful Soup
环境:win10,python 3.5,Beautiful Soup 4.1 步骤1:设定python为系统环境变量,具体设置如下图,在文本后加上";C:\Python35;C:\Pyt ...
- C语言的数据类型
复习之余,做点笔记<C语言之数据类型> 一.整数数据类型 (1)整数数据类型 整数类型 char 字符型变量 1字节(8Bit) short 短整型 2字节(16Bit) i ...
- linq query, using int.parse to convert varchar to int while orderby
var t = from x in context.NewsLetterItem.ToList() //add .ToList at this place where x.APPId == appid ...
- MyEclipse启动和运行速度优化
1:去除不需要加载的模块 Windows – Preferences - General - Startup and Shutdown,这个时候在右侧就显示出了Eclipse启动时加载的模块,可以根据 ...
- 自定义一个"花瓣"菜单-b
先来看一下效果 XLCircleMenu.gif 是不是觉得挺好玩的呀. 通过这篇文章你可以学到: 1.系统UITableView的部分设计思想 2.自定义控件常用设计思路 3.动画的具体使用 4.手 ...
- iOS新上线注意事项
上传不出现构建版本 现在苹果要求先上传版本,然后在提交审核,但是现在经常上传完应用后,不出现构建版本,等待很久很久,也不出现,那么怎么解决,我告诉你~~尼玛的苹果是自己数据丢包了,结果就造成你不出现构 ...