`
yidongkaifa
  • 浏览: 4052314 次
文章分类
社区版块
存档分类
最新评论

Linux下编程设置IP,网关

 
阅读更多

1.拼凑成指令实现:

#include <string.h>
#include <stdlib.h>

int main(void)
{
	char IP[24] = "192.168.1.225";
	char Mask[24] = "255.255.0.0";
	char gateway[24] = "10.240.0.0";
	char cmd_IP_Mask[64] = {0};
	char cmd_GW[64] = {0};
	sprintf(cmd_IP_Mask, "ifconfig eth0 %s netmask %s", IP, Mask);
	sprintf(cmd_GW, "route add default gw %s netmask %s", gateway);

	system(cmd_IP_Mask);
	system(cmd_GW);

	return 0;
}

2.从文件中获取IP地址,然后设置IP:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define FILE_NAME "ip.txt"
int main(void)
{
	FILE *fp;
	char IP[20];
	char Mask[20];
	char gateway[20];
	char cmd_IP_Set[64] = {0};
	char cmd_GW[64] = {0};
	if( (fp=fopen(FILE_NAME,"r"))==NULL )
  {
      printf("Open %s failed ! \n", FILE_NAME);
      exit(0);
  }
  fgets(IP, 20, fp);
  fgets(Mask, 20, fp);
  fgets(gateway, 20, fp);
  
  printf("IP : %s ", IP);
  printf("Mask : %s ", Mask);
  printf("gateway : %s \n", gateway);
  
  sprintf(cmd_IP_Set, "ifconfig eth0 %s", IP);
  system(cmd_IP_Set);
  sprintf(cmd_IP_Set, "ifconfig eth0 netmask %s", Mask);
  system(cmd_IP_Set);
	sprintf(cmd_IP_Set, "route add default gw %s", gateway);
	system(cmd_IP_Set);

return 0;
}


2.从文件中获取IP地址,检测IP地址的合法性,然后设置IP:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>

#define FALSE 0
#define TRUE 1

#define FILE_NAME "ip.txt"

#if 1
int is_valid_ip_address(const char *addr)
{
    int num= 0;
    int i = 0, j = 0;
    int value;
    char buf[4] ;
    int count = 0;
	int k =0,m=0;
	char test_num[20] = {0};

	while ( *(addr + i) )
	{
		if ( *(addr + i) == '.' )
		{
			++count;
			if(((count == 3) && (strlen(addr + i)>6))
				||(count > 3))
			{
				printf(" count = %d ******** %s  %d\n", count, (addr + i),strlen(addr + i));
				return FALSE;
			}	
		} 
		++i;
	}

	i = j = value = count = 0;	
    memset(buf, 0, sizeof(buf));
    while ( *(addr + i) )
    {
    	++num;
		//printf("^^^^^^^^^^^^^^^^^^^^^ %d \n",*buf);
        while ((*(addr + i) != '.') && (i< 15))
        {
        		//printf("i = %d ",i);
        		printf("num = %d   %x \n",num, atoi(addr + i));

				if(*(addr + i) == 0x0d)           // windows.
				{
					if(*(addr + i+1) == 0x0a)
					{
						printf("*************\n");
						break;
					}
				}

				if(*(addr + i) == 0x0a)          // linux.
				{
					if(*(addr + i-1) != 0x0d)
					{
						printf("222*************\n");
						//++i;
						//continue;
						break;
					}
				}				
				
				/*if(num == 4)
				{
					sprintf(test_num,"%x", (addr + i));
					printf(">>>>>>> : %s \n" test_num);
				}*/
					//printf(" ******** %d  %s  %d\n", i, (addr + i),strlen(addr + i));
        		printf("@@@@@@@@@ :%s  \n",(addr + i));
            if (( ! isdigit(*(addr + i)) ) && (num != 4))
            {
            		printf("111111111\n");
					//printf("  %s  %d\n", (addr + i),strlen(addr + i));
                	return FALSE;
                
            }
            *(buf + j) = *(addr + i);
            ++i;
            ++j;
        }
        *(buf + j) = '\0';
		//if(num == 4)
		///{
			//printf("num = %d \n",num);
			//for(k=0;k<j;++k)
				//printf("## %02x ",*buf);
		//}
		printf("\n^^^^^^^^^^^ %s  %d \n",buf,strlen(buf));
        value = atoi(buf);

        if ( (value > 255) || (value < 0) )
        {
        	printf("222222222\n");
            return FALSE;    
        }
        
        if ( *(addr + i) == '.' )
        {
        	++count;
            printf("pinggle come here : %d  \n", count);	
			printf("i = %d \n",i);
            ++i;
            j = 0;
            memset(buf, 0, sizeof(buf));
            continue;
        }
        else
        {
            break;
        }
    }

	printf("buf = %s  %d \n",buf, strlen(buf));
	//m = strlen(buf)-2;
	m = strlen(buf);
	for(k=0;k<m;++k)
	{
		printf("%c ", buf[k]);
		printf("  chech ! \n");
		if ( ! isdigit(buf[k]) ) 
        {
        	printf("444: %d  \n",num);
            return FALSE;	
		}
	}
	return TRUE;

}
#endif

#if 0
int is_valid_ip_address(const char *str)
{
	printf("%s >>>>>>>>> \n",str);
#if 1
    struct in_addr addr;
    int ret;
    volatile int local_errno;

    errno = 0;
    ret = inet_pton(AF_INET, str, &addr);
    local_errno = errno;
    if (ret > 0)
        fprintf(stderr, "\"%s\" is a valid IPv4 address\n", str);
    else if (ret < 0)
        fprintf(stderr, "EAFNOSUPPORT: %s\n", strerror(local_errno));
    else 
        fprintf(stderr, "\"%s\" is not a valid IPv4 address\n", str);

    return ret;
#endif

}
#endif

int main(void)
{
	FILE *fp;
	char IP[20];
	char Mask[20];
	char gateway[20];
	char cmd_IP_Set[64] = {0};
	char cmd_Mask[64] = {0};
	char cmd_GW[64] = {0};
	if( (fp=fopen(FILE_NAME,"r"))==NULL )
  {
      printf("Open %s failed ! \n", FILE_NAME);
      exit(0);
  }
  fgets(IP, 20, fp);
  fgets(Mask, 20, fp);
  fgets(gateway, 20, fp);
  
  //printf("check : %d \n",is_valid_ip_address(IP));
  if(is_valid_ip_address(IP))
  {
  	  printf("IP address is Valid ! \n");
	  printf("IP : %s ", IP);
	  printf("Mask : %s ", Mask);
	  printf("gateway : %s \n", gateway);

	  sprintf(cmd_IP_Set, "ifconfig eth0 %s", IP);
	  system(cmd_IP_Set);
//	  printf("set ip return : %d \n",system(cmd_IP_Set));
	  sprintf(cmd_IP_Set, "ifconfig eth0 netmask %s", Mask);
	  system(cmd_IP_Set);
//	  printf("set netmask return : %d \n",system(cmd_IP_Set));
	  sprintf(cmd_GW, "route add default gw %s", gateway);
      system(cmd_GW);
//	  printf("set wg is %d \n",system(cmd_GW));
	  printf("Set IP address OK ! \n");
  }
  else
  {
  	printf("Error : IP address is Invalid ! \n");
	printf("Set IP address Failed ! \n");
  }

return 0;
}

说明:子网掩码和网关未做检查,当IP地址和网关不在同一网段时,IP设置正确,网关会设置失败。这个与子网掩码有关,但本程序还未实现此种情况的判断,望后来者可以补上。
分享到:
评论

相关推荐

    ZigBee与局域网通信的网关设计

    Linux和PIC单片机为平台,通过串口编程、网络编程和进程间通信等方法,实 现了网关的功能。结果表明,ZigBee无线网络与互联网相互通信是可行的,这种模 式将会广泛应用于工业控制、家庭监护等领域。 一文 章 最 后对...

    LINUX网站建设技术指南

    本书介绍如何在Linux下建立,运行并维护站点的综合技术,它适合于有一定的Linux或Linux基本操作基础的网络建立者。 本书从建站的准备工作开始,写到建立功能强大的INTERNET网站,层层深入,涉及到网站建设中所遇到的...

    基于ARM-Linux的嵌入式WEB服务器

    在分析嵌入式WEB服务器原理的基础上,讨论并提出一种实现远程设备监控的方法,设计出一种基于“ARM+ARMLinux”操作系统的嵌入式WEB服务器系统,给出其软硬件设计和一些关键的实现细节。

    Linux下使用python自动修改本机网关代码分享

    #!/usr/bin/python #auto change gateway Created By mickelfeng import os import random,re\ng='gateway 192.168.1.' ...GW = %s%d%(g,rand) PingTest = 'ping -c 3 ' + test try: result=os.system&#40;...

    LINUX系统管理白皮书

    6.5 在单用户模式下引导 234 第7章 登录和注销 236 7.1 通过终端登录 236 7.2 通过网络登录 237 7.3 登录的意义 237 7.4 访问控制 238 7.5 外壳的启动 238 第8章 用户账号的管理 239 8.1 何谓账号 239 8.2 ...

    Shell脚本判断IP地址是否合法的方法

    使用shell校验IP地址合法性 使用方法: 代码如下:[root@yang python]# bash check_ip.sh IP地址执行结果:返回值0校验合法,非0不合法。shell代码: 代码如下:[root@yang python]# vi check_ip.sh #!/usr/bin/...

    用TCP-IP进行网际互联第一卷:原理,协议与结构

    国外计算机科学教材系列·用TCP/TP进行网际互联(第3卷):客户-服务器编程与应用(Linux.POSIX套接字版)》的特点是:强调原理、概念准确、深入浅出、内容丰富且新颖。全书共分为三卷。第三卷主要讨论应用软件如何使用...

    路由表查找算法-最长前缀匹配的具体实现

    在Linux操作系统中,内核中有一个路由表,它包含若干条路由记录,这些记录由子网IP、子网掩码、网关IP和接口名等组成,这些信息用于将数据包转发到其他子网或者连接到互联网;本文介绍了当需要转发数据包时,Linux...

    IIS6.0 IIS,互联网信息服务

    (2)再依次选“默认Web站点→右键→属性→Web站点”,单击“IP地址”右侧的“高级”按钮,在“此站点有多个标识下”双击已有的那个IP地址(或单击选中它后再按“编辑”按钮),然后在“主机头名”下输入...

    一种信令网关系统的设计与实现方法

    该系统的硬件部分主要由主处理器单元、数字交换网络、逻辑处理单元、接入处理单元四部分组成,软件部分基于Linux操作系统进行开发编程,能够实现对E1信号的时隙交换和IP域转换功能。实际应用表明,该系统具有操作...

    用TCP-IP进行网际互联[卷3-客户服务器编程与应用].pdf

     在说明每一种客户-服务器设计时部加以详细的示例,这些示例在Linux系统中已经过测试,并且可以在网上下载书中的所有代码  验证了应用网关和隧道技术等高级技术  详细解释了远程过程调用(RCP)以及如何用于构建...

    SX1302/SX1303硬件抽象层和工具(包转发器...)_C语言_代码_相关文件_下载

    此目录包含库的源代码,用于构建...包转发器是运行在 Lora 网关主机上的程序,它将集中器接收到的 RF 包通过 IP/UDP 链路转发到服务器,并发出服务器发送的 RF 包。 更多详情、使用方法,请下载后阅读README.md文件

    MMDVMHost:MMDVM的主机程序

    这些是用于构建MMDVMHost的源文件,该文件在一侧与MMDVM或DVMega接口,而在另一侧与合适的网络连接。 它支持MMDVM上的D-Star,DMR,P25 Phase 1,NXDN,System ... 它基于32位和64位Linux以及在x86和x64上使用Visua

    嵌入式系统中SIP协议在VOIP的应用及实现

    VOIP(Voice over IP)技术可以将传统电信语音信号在IP网上传输,通过互联网连接不同地理位置的网关,实现传统语音通话网络与IP网络的资源共享。为了实现传统语音通信网络与IP网的互联,各网关之间需要使用SIP协议...

    ioBroker.enet:用于ioBroker的JungGira eNet Smarthome适配器

    使用Jung / Gira eNet Mobile Gate无线IP网关控制Jung / Gira eNet智能家居设备( )或Jung / Gira eNet智能家居服务器。 变更日志 1.0.52(2021-03-23) (stoffel7)修复了一些错误(deltree.fct,valueChanged ....

    MaxDOS 5.6s U盘版

    (VIAGO为自动批处理文件,45为您要设置的客户机IP的最后一位数,前面的192.168.5不用 输入的,输入为自后自动激活网卡,及IP奄码配置文件,自动生成IP地址为 192.168.5.45 子奄码为:255.255.255.0 网关:192.168.5.100),...

    20秋学期(1909、2003、2009-)《计算机网络管理》在线作业-(1).docx

    A:ARP协议是无状态的不经验证把IP地址和MAC地址映射写入缓存 B:伪造IP地址和MAC地址映射关系来实现ARP欺骗 C:在网关上设置MAC地址绑定,合理划分VLAN,无法放置IP地址盗用 D:安装防病毒软件和ARP防火墙,可以查杀ARP...

    JAVA上百实例源码以及开源项目源代码

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    若干源程序资料12.rar

    2012-06-11 21:10 4,371 更改网关IP.rar 2012-06-11 20:57 1,419 栈的实现.txt 2012-06-11 21:18 57,078 汇编数显大型交通灯控制.rar 2012-06-11 21:35 1,055,980 流量计算.rar 2012-06-11 21:11 8,198,339 王凡的...

Global site tag (gtag.js) - Google Analytics