天天看點

設定系統網關

将用到以下結構和函數:

在net/route.h中:

struct rtentry

{

......

struct sockaddr rt_dst;

struct sockaddr rt_gateway;

struct sockaddr rt_genmask;

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;

}

if ( ioctl ( skfd, SIOCADDRT, &rt ) < 0 )

{

printf ( "ioctl error\n" );

close ( skfd );

return -1;

}

close ( skfd );

return 0;

繼續閱讀