From 976c801cbe9ae8d03cae529b57a10cbb588fd92a Mon Sep 17 00:00:00 2001 From: epochqwert Date: Sun, 28 Jun 2015 00:15:29 -0500 Subject: fixed up a lot of warnings. added watch. --- src/bin/great.c | 48 ++++++++++++++++-------------------------------- 1 file changed, 16 insertions(+), 32 deletions(-) (limited to 'src/bin/great.c') diff --git a/src/bin/great.c b/src/bin/great.c index 11976b8..9a554fc 100644 --- a/src/bin/great.c +++ b/src/bin/great.c @@ -9,68 +9,52 @@ #include #include -#define PORT 1013 - /*great = gre auto tunnel*/ -void dump(unsigned char *b,unsigned int t) { - for(;t;b++,t--) printf("%02x ",*b); -} - -/* TODO: - args. - password? - clean out the extra shit. - clean it up even more. - - arguments: - interface - listen-port - listen-addr - password? -*/ int main(int argc,char *argv[]) { struct sockaddr_in sa; struct sockaddr_in from; - char buf[512]; + char in; socklen_t sl=sizeof(struct sockaddr_in); int so_link=socket(AF_LINK,SOCK_DGRAM,0); - int so_unspec=socket(AF_UNSPEC,SOCK_DGRAM,0); int so_inet=socket(AF_INET,SOCK_DGRAM,0); int so=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); memset(&sa,0,(size_t)sizeof(struct sockaddr_in)); memset(&from,0,(size_t)sizeof(struct sockaddr_in)); - sa.sin_addr.s_addr=inet_addr("192.168.0.2"); - sa.sin_port=htons(PORT); + if(argc < 4) { + printf("usage: %s interface address port",argv[0]); + printf("example: %s gre0 192.168.0.2 1013",argv[0]); + return 1; + } + sa.sin_addr.s_addr=inet_addr(argv[2]); + sa.sin_port=htons(atoi(argv[3])); sa.sin_family=PF_INET; bind(so,(struct sockaddr *)&sa,sizeof(sa)); - recvfrom(so,buf,sizeof(buf),0,(struct sockaddr *)&from,&sl); - connect(so,(struct sockaddr *)&from,sl); + recvfrom(so,&in,1,0,(struct sockaddr *)&from,&sl); struct in_addr addr = {from.sin_addr.s_addr}; - printf("%s\n",inet_ntoa(addr)); + printf("setting remote end to %s:%d\n",inet_ntoa(addr),ntohs(from.sin_port)); + connect(so,(struct sockaddr *)&from,sl); +//name this stuff better and test if it needs to be refilled each time. struct ifreq *asdf; asdf=malloc(sizeof(struct ifreq)); memset(asdf,0,sizeof(struct ifreq)); - strcpy(asdf->ifr_name,"gre10"); + strcpy(asdf->ifr_name,argv[1]); printf("destroy: %d\n",ioctl(so_link,SIOCIFDESTROY,asdf));//destroy memset(asdf,0,sizeof(struct ifreq)); - strcpy(asdf->ifr_name,"gre10"); + strcpy(asdf->ifr_name,argv[1]); printf("create: %d\n",ioctl(so_link,SIOCIFCREATE,asdf));//create memset(asdf,0,sizeof(struct ifreq)); - strcpy(asdf->ifr_name,"gre10"); + strcpy(asdf->ifr_name,argv[1]); asdf->ifr_flags=IPPROTO_UDP; printf("proto: %d\n",ioctl(so_link,GRESPROTO,asdf));//link0 link2 memset(asdf,0,sizeof(struct ifreq)); - strcpy(asdf->ifr_name,"gre10"); + strcpy(asdf->ifr_name,argv[1]); asdf->ifr_value=so; printf("gressock: %d\n",ioctl(so_inet,GRESSOCK,asdf));//set socket - - sleep(1); - system("ifconfig gre10");//just so you can see what it looks like. return 0; } -- cgit v1.2.3