linux C Get/Set IP Address

//------------------------h file------------------- 
//setip.h
#ifndef _INCLUDE_SETIP_H_
#define _INCLUDE_SETIP_H_  //设置IP地址
/*
 * 函数名称 : int setip(char *ip)
 * 函数功能 : 设置系统IP地址
 * 参    数 : 
 *            char *ip :设置的IP地址,以点分十进制的字符串方式表示,如“192.168.0.5” 
 * 返 回 值 : 0 : 成功 ;  -1 :  失败 
 */
 int setip(char*ip); //获取IP地址
/*
 * 函数名称 : char * getip(char *ip_buf)
 * 函数功能 : 获取系統IP地址
 * 参    数 : 
 *            char *ip_buf :用来存放IP地址的内存空间
 * 返 回 值 : ip_buf : 存放IP地址的内存地址
 */
char* getip(char*ip_buf); 
#endif

//_INCLUDE_SETIP_H_
//end setip.h

//------------------------c file-----------------------
//setip.c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/ioctl.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<netinet/in.h>
#include<net/if.h>
#include "setip.h"

//设置IP地址
/*
 * 函数名称 : int setip(char *ip)
 * 函数功能 : 设置系统IP地址
 * 参    数 : 
 *            char *ip :设置的IP地址,以点分十进制的字符串方式表示,如“192.168.0.5” 
 * 返 回 值 : 0 : 成功 ;  -1 :  失败 
 */
int setip(char*ip)
{    
	struct ifreq temp;    
	struct sockaddr_in *addr;    
	int fd = 0;    
	int ret = -1;    
	strcpy(temp.ifr_name, "eth0");    
	if((fd=socket(AF_INET, SOCK_STREAM, 0))<0)    
	{        
		return -1;    
	}    
	addr = (struct sockaddr_in *)&(temp.ifr_addr);    
	addr->sin_family = AF_INET;    
	addr->sin_addr.s_addr = inet_addr(ip);    
	ret = ioctl(fd, SIOCSIFADDR, &temp);    
	close(fd);    
	if(ret < 0)        
		return -1;    
	return 0;
} 

//获取IP地址
/*
 * 函数名称 : char * getip(char *ip_buf)
 * 函数功能 : 获取系統IP地址
 * 参    数 : 
 *            char *ip_buf :用来存放IP地址的内存空间
 * 返 回 值 : ip_buf : 存放IP地址的内存地址
 */
char * getip(char *ip_buf)
{    
	struct ifreq temp;    
	struct sockaddr_in *myaddr;    
	int fd = 0;    
	int ret = -1;    
	strcpy(temp.ifr_name, "eth0");    
	if((fd=socket(AF_INET, SOCK_STREAM, 0))<0)    
	{        
		return -1;    
	}    
	ret = ioctl(fd, SIOCGIFADDR, &temp);    
	close(fd);    
	if(ret < 0)        
		return NULL;    
	myaddr = (struct sockaddr_in *)&(temp.ifr_addr);    
	strcpy(ip_buf, inet_ntoa(myaddr->sin_addr));    
	return ip_buf;
}  

/*测试程序*/
/*
int main(int argc, char * argv[])
{
    char * ip = "172.20.223.117";
    char buf[16]="";
    setip(ip);
    printf("ipaddr=%s/n",getip(buf));
    return 0;
}
*/
//end setip.c


from http://blog.csdn.net/jueqing007/article/details/5991859

你可能感兴趣的:(linux C Get/Set IP Address)