//get net interface info void getnetinfo(const char *netname, struct str_net_addr *net_info) //ccc { struct ifaddrs *ifaces, *ifa; char abuf[64], mbuf[64], dbuf[64]; if (getifaddrs (&ifaces) < 0) { printf ("Couldn't get any interfaces\n"); if(ifaces) freeifaddrs (ifaces); return; } for (ifa = ifaces; ifa != NULL; ifa = ifa->ifa_next) { if(strcmp(ifa->ifa_name, netname)==0) { printf ("%-15s%#.4x %-15s %-15s %-15s\n", ifa->ifa_name, ifa->ifa_flags, addr_string (ifa->ifa_addr, abuf, sizeof (abuf)), addr_string (ifa->ifa_netmask, mbuf, sizeof (mbuf)), addr_string (ifa->ifa_broadaddr, dbuf, sizeof (dbuf))); str2ip(abuf, net_info->ip); str2ip(mbuf, net_info->mask); } } freeifaddrs(ifaces); }
int main(int argc, char *argv[]){ int sockfd, i; Address a; setbuf(stdout, NULL); puts("NIH Proxy"); puts("Specify an HTTP server to connect to"); puts("DNS is too hard; just provide an IP address"); char target[20]; fgets(target, 20, stdin); char* octet = strtok(target, ".\n"); for(i=0;i<4;i++){ if(!octet) error("Invalid IP address"); a.octets[i] = atoi(octet); if(a.octets < 0 || a.octets[i] > 256) { fprintf(stderr, "Invalid host\n"); exit(-1); } octet = strtok(NULL, ".\n"); } filter(&a); printf("Connecting to %s\n", addr_string(&a)); int sin_addr = 0; for(i=0; i<4;i++){ sin_addr <<= 8; sin_addr |= a.octets[i]; } struct sockaddr_in serv_addr; sockfd = socket(AF_INET, SOCK_STREAM, 0); serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(80); serv_addr.sin_addr.s_addr = htonl(sin_addr); alarm(5); connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)); char *buf = calloc(256, 1); int len = sprintf(buf, "GET / HTTP/1.1\nHost: %s\n\n", addr_string(&a)); write(sockfd, buf, len); int total_len = 0; while(total_len < 1024*10){ len = read(sockfd, buf, 255); if(len <= 0) break; total_len += len; buf[len] = 0; fputs(buf, stdout); if(len < 255) break; } close(sockfd); return 0; }
U8_EXPORT u8_string u8_sockaddr_string(struct sockaddr *s) { if (s->sa_family==AF_INET) { struct sockaddr_in *inaddr=(struct sockaddr_in *)s; return addr_string(ntohs(inaddr->sin_port), (unsigned char *)&(inaddr->sin_addr),4);} #if HAVE_SYS_UN_H else if (s->sa_family==AF_UNIX) { struct sockaddr_un *unaddr=(struct sockaddr_un *)s; return u8_mkstring("%s@unix",unaddr->sun_path);} #endif #ifdef AF_INET6 else if (s->sa_family==AF_INET6) { struct sockaddr_in6 *inaddr=(struct sockaddr_in6 *)s; return addr_string(ntohs(inaddr->sin6_port), (unsigned char *)&(inaddr->sin6_addr),8);} #endif else return u8_strdup("strange sockaddr"); }