您的位置:首页 > 运维架构 > Linux

linux C 获取与修改IP地址

2010-11-06 15:20 603 查看
//setip.h

#ifndef_INCLUDE_SETIP_H_

#define
_INCLUDE_SETIP_H_



//设置IP地址

/*

*函数名称:intsetip(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_


//endsetip.h


//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地址

/*

*函数名称:intsetip(char*ip)

*函数功能:设置系统IP地址

*参数:

*char*ip:设置的IP地址,以点分十进制的字符串方式表示,如“192.168.0.5”

*返回值:0:成功;-1:失败

*/

int
setip(char
*ip)

{

struct
ifreqtemp;

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
ifreqtemp;

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;

}



/*测试程序*/

/*

inttest_fun(intargc,char*argv[])

{

char*ip="172.20.223.117";

charbuf[16]="";

setip(argv[1]);

printf("ipaddr=%s/n",getip(buf));

return0;

}

*/

//endsetip.c
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: