将用到以下结构和函数:
在net/route.h中:
struct rtentry
{
......
struct sockaddr rt_dst; /* Target address. */
struct sockaddr rt_gateway; /* Gateway addr (RTF_GATEWAY). */
struct sockaddr rt_genmask; /* Target network mask (IP). */
unsigned short int rt_flags;
......
};
`函数声明:
int set_gateway ( const char * gateway )
`代码:
struct rtentry rt;
struct sockaddr_in sin;
int skfd = -1;
/* 结构初始化 */
memset ( &rt, 0, sizeof ( struct rtentry ));
memset ( &sin, 0, sizeof ( struct sockaddr_in ));
sin.sin_family = AF_INET;
sin.sin_port = 0;
if ( inet_aton ( gateway, &sin.sin_addr ) < 0 )
{
printf ( "inet_aton error\n" );
return -1;
}
memcpy ( &rt.rt_gateway, &sin, sizeof ( sockaddr_in ));
(( struct sockaddr_in * ) &rt.rt_dst )->sin_family = AF_INET;
(( struct sockaddr_in * ) &rt.rt_genmask )->sin_family = AF_INET;
rt.rt_flags = RTF_GATEWAY;
skfd = socket ( AF_INET, SOCK_DGRAM, 0 );
if ( skfd < 0 )
{
printf ( "socket error\n" );
return -1;
}
/* 设置系统gaetway */
if ( ioctl ( skfd, SIOCADDRT, &rt ) < 0 )
{
printf ( "ioctl error\n" );
close ( skfd );
return -1;
}
close ( skfd );
return 0;