C语言掩码图作用,请教C语言编程实现 static ip 掩码、网关 设置

请教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

分享:

a4c26d1e5885305701be709a3d33442f.png喜欢

0

a4c26d1e5885305701be709a3d33442f.png赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

a4c26d1e5885305701be709a3d33442f.png

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值