Welcome to Bruno Bonfils's (aka asyd homepage).
How to add/del route in C#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <sys/ioctl.h> #include <linux/route.h> #define ROUTE_ADD SIOCADDRT #define ROUTE_DEL SIOCDELRT int route_edit(int action, struct sockaddr_in destination, struct sockaddr_in gateway); int main (int argc, char *argv[]) { struct sockaddr_in dest, gw; /* Fill structures with 0 */ memset (&dest, 0, sizeof(dest)); memset (&gw, 0, sizeof(gw)); dest.sin_family = AF_INET; dest.sin_addr.s_addr = inet_addr("1.2.3.4"); gw.sin_family = AF_INET; gw.sin_addr.s_addr = inet_addr("127.0.0.1"); printf("-> %d\n", route_edit(ROUTE_ADD, dest, gw)); printf("-> %d\n", route_edit(ROUTE_DEL, dest, gw)); exit (0); } /* Add or delete a route */ int route_edit(int action, struct sockaddr_in destination, struct sockaddr_in gateway) { struct rtentry new_route; int skt; /* Fill structure */ memset(&new_route, 0, sizeof(struct rtentry)); /* Copy sockadd_in structure to new_route */ memcpy((char *) &new_route.rt_dst, (char *) &destination, (sizeof destination)); memcpy((char *) &new_route.rt_gateway, (char *) &gateway, (sizeof gateway)); /* Open socket */ if ((skt = socket(AF_INET, SOCK_DGRAM, 0)) < 0) return -1; /* Proceed */ { int ret; ret = ioctl(skt, action, &new_route); /* Close socket */ close (skt); return ret; } } |
Discussion