#include #include #include #include #include #include #include #include /* getshell6.c is provided by 0x4D722E20446F6E This code is ripped and modified from Joonbok Lee Presentation about IPv6 Socket Programming */ int main(int argc, char *argv[]){ fd_set fd_read; char buff[2048]; int n, s, c, retval, addrlen; struct addrinfo Hints, *AddrInfo, *AI; if(argc!=3){ printf("Usage : %s \n", argv[0]); exit(0); } if(strstr(argv[1],":")==NULL){ printf("ERR : You dont enter valid IPv6 address!\n"); exit(0); } memset(&Hints,0,sizeof(Hints)); Hints.ai_family = AF_UNSPEC; Hints.ai_socktype = SOCK_STREAM; retval = getaddrinfo(argv[1],argv[2], &Hints, &AddrInfo); if(retval!=0){ printf("Cannot resolve requested address\n"); exit(0); } for(AI=AddrInfo;AI!=NULL;AI=AI->ai_next){ if(AI->ai_family==AF_INET6){ if((s=socket(AI->ai_family,AI->ai_socktype,AI->ai_protocol))<0){ printf("can't create socket\n"); exit(0); } c=connect(s,AI->ai_addr,AI->ai_addrlen); }else{ printf("%s is not IPv6 family\n",argv[1]); } freeaddrinfo(AddrInfo); } FD_ZERO(&fd_read); FD_SET(s, &fd_read); FD_SET(0, &fd_read); while(1) { FD_SET(s,&fd_read); FD_SET(0,&fd_read); if (select(FD_SETSIZE, &fd_read, NULL, NULL, NULL) < 0 ) break; if (FD_ISSET(s, &fd_read)) { if((n = recv(s, buff, sizeof(buff), 0)) < 0){ fprintf(stderr, "EOF\n"); exit(2); } if (write(1, buff, n) < 0) break; } if (FD_ISSET(0, &fd_read)) { if((n = read(0, buff, sizeof(buff))) < 0){ fprintf(stderr, "EOF\n"); exit(2); } if (send(s, buff, n, 0) < 0) break; } usleep(10); } fprintf(stderr, "Connection lost.\n\n"); exit(0); }