gateway 默认路由获取与设置
来源:互联网 发布:办公软件技巧大全 编辑:程序博客网 时间:2024/05/17 23:05
//Route add -net default gw 192.168.22.1
//在有IP没有默认路由的时候设置
/*cat /proc/net/route
Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT
eth0 0016A8C0 00000000 0001 0 0 0 00FFFFFF 0 0 0
eth0 00000000 0116A8C0 0003 0 0 0 00000000 0 0 0
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <net/route.h>
#include <net/if.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
int network_get_gatway(int sock_id,char *interface_name, char *gateway)
{
FILE *fp;
char buf[256]; // 128 is enough for linux
char iface[16];
unsigned long dest_addr,net_addr,gate_addr;
struct in_addr addr;
unsigned long *p;
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||!strcpy(iface,interface_name))
continue;
break;
}
fclose(fp);
printf("gate_addr:%lx\n",gate_addr);
memcpy(&addr,&gate_addr,4);
strcpy( gateway,inet_ntoa(addr));
printf("gateway=%s\n",gateway);
return 0;
}
int network_set_getway(int sock_id,char *interface_name, char *gateway)
{
struct rtentry rt;
u_int32_t dstaddr, gwaddr;
dstaddr = inet_addr("0.0.0.0");
gwaddr = inet_addr(gateway);
memset (&rt, 0, sizeof (rt));
/*set Destination addr*/
memset ((char *) &(rt.rt_dst),0, sizeof(rt.rt_dst));
rt.rt_dst.sa_family = AF_INET;
((struct sockaddr_in *)&(rt.rt_dst))->sin_addr.s_addr= dstaddr;
/*set gw addr*/
memset ((char *) &(rt.rt_gateway),0, sizeof(rt.rt_gateway));
rt.rt_gateway.sa_family = AF_INET;
((struct sockaddr_in *)&(rt.rt_gateway))->sin_addr.s_addr= gwaddr;
/*set genmask addr*/
memset ((char *) &(rt.rt_genmask),0, sizeof(rt.rt_genmask));
rt.rt_genmask.sa_family = AF_INET;
((struct sockaddr_in *)&(rt.rt_genmask))->sin_addr.s_addr= 0L;
rt.rt_dev = interface_name;
rt.rt_flags = RTF_GATEWAY;
if (ioctl(sock_id, SIOCADDRT, &rt) < 0)
{
printf("SIOCADDRT failed: %s %d\n", strerror(errno),RTF_GATEWAY);
return -1;
}
return 0;
}
int main()
{
int sock_id;
char ifname[]="eth0";
char getway[16]="192.168.22.1";
char getway1[16];
sock_id=socket(AF_INET,SOCK_DGRAM,0);
if (sock_id < 0)
{
printf("socket failed: %s\n", strerror(errno));
return -1;
}
network_set_getway(sock_id,ifname, getway);
network_get_gatway(sock_id,ifname, getway1);
return 0;
}
- gateway 默认路由获取与设置
- GATEWAY获取与设置(Linux C)
- GATEWAY获取与设置(Linux C)
- GATEWAY获取与设置(Linux C)
- GATEWAY获取与设置(Linux C)
- Windows修改默认路由(Default Gateway)
- linux下程序设计-GateWay的获取与设置
- 双网卡默认路由设置
- ip route默认路由设置
- ip route默认路由设置
- vue-router 设置默认路由
- 静态路由与默认路由的配置
- 路由器之间 静态,默认,动态获取路由表设置(Cisco Packer Tracer 模拟器)
- 【 java 】 telnet默认路由 获取拨号信息~
- 默认网关Default Gateway
- 静态路由与默认路由( 原理+区别+实例)
- 静态路由与默认路由( 原理+区别+实例)
- CCNA实验十九 静态与默认路由
- BestCoder Round #83 1004 && HDU-5683 zxa and xor (水)
- 解决“Dynamic Web Module 3.0 requires Java 1.6 or newer.”错误
- MySQL安装启动时报错一则
- linux文件权限的总结
- 【SSH网上商城项目实战18】过滤器实现购物登录功能的判断
- gateway 默认路由获取与设置
- 337. House Robber III
- Android permission
- 不该忽视的影响SEO效果的“硬件”——服务器性能!
- 欢迎使用CSDN-markdown编辑器
- 如何通俗的理解java的依赖注入!
- siblings筛选同胞元素
- Oracle日期周详解以及周开始结束时间计算
- 《Motion Design for iOS》(十八)