请教C语言编程实现 static ip 掩码、网关 设置
(2012-06-05 05:31:37)
标签:
编程
c语言
杂谈
请教C语言编程实现 static ip 掩码、网关 设置通过UI设置IP Address, submask, gateway,
dns,实现static 网络连接。 DHCP实现已经成功:
if ( execl( DHCPCD_EXE_FULL_PATH,
"dhcpcd",
"-L", DHCPCD_CONFIG_DIR,
"-R",
"-Y",
"-N",
"-G",
"-n",
ifname, (char*)0 ) == -1 )
{
exit( 1 );
}
static 实现方式如下:
err = setIPAddr(s, &ifr, StaticIP);
if( !err)
{
err = setSubMask(s, &ifr, StaticSubMask);
}
if( !err)
{
char * StaticDstaddr =
"192.168.1.0";
err = setDstaddr(s, &ifr, StaticDstaddr);
}
if( !err)
{
char * StaticBrdaddr =
"192.168.1.255";
err = setBrdaddr(s, &ifr, StaticBrdaddr);
}
if(!err)
{
err = setMtu(s, &ifr, 1500);
}
if ( !err)
{
err =setGateWay(s, ifname, StaticGateWay);
}
INT32 setIPAddr(int sfd, struct ifreq *ifr, char *
staticIPAddr)
{
struct sockaddr_in *p = (struct sockaddr_in
*)&(ifr->ifr_addr);
p->sin_family = AF_INET;
inet_aton(staticIPAddr,
&(p->sin_addr));
if(ioctl(sfd, SIOCSIFADDR, (caddr_t)ifr) < 0)
{
perror("ioctl");
return -1;
}
return 0;
}
INT32 setSubMask(int sfd, struct ifreq *ifr, char *
staticSubMask)
{
struct sockaddr_in *p = (struct sockaddr_in
*)&(ifr->ifr_addr);
p->sin_family = AF_INET;
inet_aton(staticSubMask,
&(p->sin_addr));
if(ioctl(sfd, SIOCSIFNETMASK, (caddr_t)ifr) <
0)
{
perror("ioctl");
return -1;
}
return 0;
}
INT32 setDstaddr(int sfd, struct ifreq *ifr, char *
staticDstaddr)
{
struct sockaddr_in *p = (struct sockaddr_in
*)&(ifr->ifr_addr);
p->sin_family = AF_INET;
inet_aton(staticDstaddr,
&(p->sin_addr));
if(ioctl(sfd, SIOCSIFDSTADDR, (caddr_t)ifr) <
0)
{
perror("ioctl");
return -1;
}
return 0;
}
INT32 setBrdaddr(int sfd, struct ifreq *ifr, char *
staticBrdaddr)
{
struct sockaddr_in *p = (struct sockaddr_in
*)&(ifr->ifr_addr);
p->sin_family = AF_INET;
inet_aton(staticBrdaddr,
&(p->sin_addr));
if(ioctl(sfd, SIOCSIFBRDADDR, (caddr_t)ifr) <
0)
{
perror("ioctl");
return -1;
}
return 0;
}
INT32 setMtu(int sfd, struct ifreq *ifr, int staticMtu)
{
struct sockaddr_in *p = (struct sockaddr_in
*)&(ifr->ifr_addr);
p->sin_family = AF_INET;
ifr->ifr_mtu = staticMtu;
if(ioctl(sfd, SIOCSIFMTU, (caddr_t)ifr) < 0)
{
perror("ioctl");
return -1;
}
return 0;
}
INT32 setGateWay(int sfd, char * ifname, char *
staticGateWay)
{
struct rtentryrt;
struct sockaddr_intempaddr;
UINT32 staticSubGateWay;
memset(&tempaddr, 0, sizeof(struct
sockaddr_in));
inet_aton(staticGateWay,
&(tempaddr.sin_addr));
staticSubGateWay = tempaddr.sin_addr.s_addr;
memset( &rt, 0, sizeof(rt) );
SET_SA_FAMILY( rt.rt_dst, AF_INET );
SET_SA_FAMILY( rt.rt_gateway, AF_INET );
SET_SA_FAMILY
分享:
喜欢
0
赠金笔
加载中,请稍候......
评论加载中,请稍候...
发评论
登录名: 密码: 找回密码 注册记住登录状态
昵 称:
评论并转载此博文
发评论
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。