/* Lookup a route for a specified destination */ #include #include #include #include #include #include #include #include #include #include struct in_addr *lookup_iface(char *); struct my_ifreq { union { char ifrn_name[IFNAMSIZ]; /* Interface name, e.g. "en0". */ } ifr_ifrn; union { struct sockaddr_in ifru_addr; char ifru_data[512]; } ifr_ifru; } ifreq; int main(int argc, char **argv) { struct hostent *remote_host; unsigned int remote_ip; FILE *PROC; char line[512]; if (argc > 1) { remote_host = gethostbyname(argv[1]); memcpy((char *) &remote_ip, remote_host->h_addr_list[0],sizeof(remote_host->h_addr_list[0])); } else { fprintf(stderr, "Usage: %s remote_ip\n",argv[0]); exit(1); } PROC = fopen("/proc/net/route","r"); /* First line contains headers */ fgets(line,sizeof(line),PROC); while (!feof(PROC)) { char iface[8]; unsigned int dest, gateway, mask; int i,aoffset; char *fields[10]; fgets(line,sizeof(line),PROC); aoffset = 0; for (i=0;i