GATEWAY获取与设置(Linux C)
来源:互联网 发布:java判断object的类型 编辑:程序博客网 时间:2024/06/05 07:39
GATEWAY获取与设置(Linux C)
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <net/if.h>
#include <sys/ioctl.h>
#include <errno.h>
#include <string.h>
#include <net/route.h>
#include <unistd.h>
#include <stdio.h>
int set_gateway(unsigned long gw)
{
int skfd;
struct rtentry rt;
int err;
skfd = socket(PF_INET, SOCK_DGRAM, 0);
if (skfd < 0)
return -1;
/* Delete existing defalt gateway */
memset(&rt, 0, sizeof(rt));
rt.rt_dst.sa_family = AF_INET;
((struct sockaddr_in *)&rt.rt_dst)->sin_addr.s_addr = 0;
rt.rt_genmask.sa_family = AF_INET;
((struct sockaddr_in *)&rt.rt_genmask)->sin_addr.s_addr = 0;
rt.rt_flags = RTF_UP;
err = ioctl(skfd, SIOCDELRT, &rt);
if ((err == 0 || errno == ESRCH) && gw) {
/* Set default gateway */
memset(&rt, 0, sizeof(rt));
rt.rt_dst.sa_family = AF_INET;
((struct sockaddr_in *)&rt.rt_dst)->sin_addr.s_addr = 0;
rt.rt_gateway.sa_family = AF_INET;
((struct sockaddr_in *)&rt.rt_gateway)->sin_addr.s_addr = gw;
rt.rt_genmask.sa_family = AF_INET;
((struct sockaddr_in *)&rt.rt_genmask)- >sin_addr.s_addr = 0;
rt.rt_flags = RTF_UP | RTF_GATEWAY;
err = ioctl(skfd, SIOCADDRT, &rt);
}
close(skfd);
return err;
}
int get_gateway(unsigned long *p)
{
FILE *fp;
char buf[256]; // 128 is enough for linux
char iface[16];
unsigned long dest_addr, gate_addr;
*p = INADDR_NONE;
fp = fopen("/proc/net/route", "r");
if (fp == NULL)
return -1;
/* Skip title line */
fgets(buf, sizeof(buf), fp);
while (fgets(buf, sizeof(buf), fp)) {
if (sscanf(buf, "%s\t%lX\t%lX", iface, &dest_addr, &gate_addr) != 3 ||
dest_addr != 0)
continue;
*p = gate_addr;
break;
}
fclose(fp);
return 0;
}
#include <sys/socket.h>
#include <netinet/in.h>
#include <net/if.h>
#include <sys/ioctl.h>
#include <errno.h>
#include <string.h>
#include <net/route.h>
#include <unistd.h>
#include <stdio.h>
int set_gateway(unsigned long gw)
{
int skfd;
struct rtentry rt;
int err;
skfd = socket(PF_INET, SOCK_DGRAM, 0);
if (skfd < 0)
return -1;
/* Delete existing defalt gateway */
memset(&rt, 0, sizeof(rt));
rt.rt_dst.sa_family = AF_INET;
((struct sockaddr_in *)&rt.rt_dst)->sin_addr.s_addr = 0;
rt.rt_genmask.sa_family = AF_INET;
((struct sockaddr_in *)&rt.rt_genmask)->sin_addr.s_addr = 0;
rt.rt_flags = RTF_UP;
err = ioctl(skfd, SIOCDELRT, &rt);
if ((err == 0 || errno == ESRCH) && gw) {
/* Set default gateway */
memset(&rt, 0, sizeof(rt));
rt.rt_dst.sa_family = AF_INET;
((struct sockaddr_in *)&rt.rt_dst)->sin_addr.s_addr = 0;
rt.rt_gateway.sa_family = AF_INET;
((struct sockaddr_in *)&rt.rt_gateway)->sin_addr.s_addr = gw;
rt.rt_genmask.sa_family = AF_INET;
((struct sockaddr_in *)&rt.rt_genmask)- >sin_addr.s_addr = 0;
rt.rt_flags = RTF_UP | RTF_GATEWAY;
err = ioctl(skfd, SIOCADDRT, &rt);
}
close(skfd);
return err;
}
int get_gateway(unsigned long *p)
{
FILE *fp;
char buf[256]; // 128 is enough for linux
char iface[16];
unsigned long dest_addr, gate_addr;
*p = INADDR_NONE;
fp = fopen("/proc/net/route", "r");
if (fp == NULL)
return -1;
/* Skip title line */
fgets(buf, sizeof(buf), fp);
while (fgets(buf, sizeof(buf), fp)) {
if (sscanf(buf, "%s\t%lX\t%lX", iface, &dest_addr, &gate_addr) != 3 ||
dest_addr != 0)
continue;
*p = gate_addr;
break;
}
fclose(fp);
return 0;
}
0 0
- GATEWAY获取与设置(Linux C)
- GATEWAY获取与设置(Linux C)
- GATEWAY获取与设置(Linux C)
- GATEWAY获取与设置(Linux C)
- linux下程序设计-GateWay的获取与设置
- gateway 默认路由获取与设置
- Linux环境下设置IP&DNS&Gateway
- linux ip 设置与获取
- 在linux下 获取,修改网关GateWay的两个函数
- 在Linux下获取修改网关GateWay的两个函数
- Linux上设置静态网络配置,ip/gateway/DNS
- Linux(CentOS)下,设置IP/Netmask/Gateway等
- Linux(CentOS)下,设置IP/Netmask/Gateway等
- linux下程序设计-IP获取与设置
- 工作日记--设置gateway
- linux C 获取与修改IP地址
- linux C 获取与修改IP地址
- linux C 获取与修改IP地址
- 基于WSDL文件反向编译生成Java类(使用Axis开源框架)
- UNIX环境C语言编程(6)-进程环境
- CImg库下载
- 使用ioctl SIOCSIFHWADDR设置MAC要使用ARPHRD_ETHER
- 07-1. 换个格式输出整数 (15)
- GATEWAY获取与设置(Linux C)
- 转载 Android4: Write Storage权限问题
- Installing Oracle Configuration Manager(OCM)
- 如何才能让自己的新站快速的通过搜索引擎的考核期?
- 冬令营第五天
- 07-2. A+B和C (15)
- Android动画
- 矩形嵌套
- JNI初探记录