4545#define SOCKFAMILY (x ) (satosin(x)->sin_family)
4646#define MAX_CHAIN 512
4747
48-
49-
50-
51-
52-
53-
54-
55- #include <stdio.h>
56- #include <stdlib.h>
57- #include <unistd.h>
58- #include <dlfcn.h>
59- #include <sys/types.h>
60- #include <sys/socket.h>
61- #include <string.h>
62- #include <strings.h>
63- #include <sys/types.h>
64- #include <netinet/in.h>
65- #include <arpa/inet.h>
66- #include <sys/poll.h>
67- #include <sys/time.h>
68- #include <pwd.h>
69- #include <errno.h>
70- #include <fcntl.h>
71- #include <stdarg.h>
72- #include <resolv.h>
73-
74-
75-
7648connect_t true_connect ;
7749gethostbyname_t true_gethostbyname ;
7850getaddrinfo_t true_getaddrinfo ;
7951freeaddrinfo_t true_freeaddrinfo ;
8052getnameinfo_t true_getnameinfo ;
8153gethostbyaddr_t true_gethostbyaddr ;
8254
55+ send_t true_send ;
56+ sendto_t true_sendto ;
57+ sendmsg_t true_sendmsg ;
58+
8359int tcp_read_time_out ;
8460int tcp_connect_time_out ;
8561chain_type proxybound_ct ;
@@ -144,6 +120,10 @@ static void do_init(void) {
144120 SETUP_SYM (freeaddrinfo );
145121 SETUP_SYM (gethostbyaddr );
146122 SETUP_SYM (getnameinfo );
123+
124+ //SETUP_SYM(send);
125+ //SETUP_SYM(sendto);
126+ //SETUP_SYM(sendmsg);
147127
148128 init_l = 1 ;
149129}
@@ -198,6 +178,9 @@ static void get_chain_data(proxy_data * pd, unsigned int *proxy_count, chain_typ
198178 char local_in_addr_port [32 ];
199179 char local_in_addr [32 ], local_in_port [32 ], local_netmask [32 ];
200180 FILE * file = NULL ;
181+
182+ //printf("ssssssssss\n");
183+ //dprintf("sssszeezesssssssss\n");
201184
202185 if (proxybound_got_chain_data )
203186 return ;
@@ -366,8 +349,19 @@ int connect(int sock, const struct sockaddr *addr, socklen_t len) {
366349 optlen = sizeof (socktype );
367350 getsockopt (sock , SOL_SOCKET , SO_TYPE , & socktype , & optlen );
368351
369- //if(!(SOCKFAMILY(*addr) == AF_INET && socktype == SOCK_STREAM)) {
370- if (SOCKFAMILY (* addr ) != AF_INET ) {
352+
353+ p_addr_in = & ((struct sockaddr_in * ) addr )-> sin_addr ;
354+
355+ PDEBUG ("aaaaaaaaaaa\n" );
356+ for (i = 0 ; i < num_localnet_addr ; i ++ ) {
357+ PDEBUG ("eeeeeeeeeeee\n" );
358+ if ((localnet_addr [i ].in_addr .s_addr & localnet_addr [i ].netmask .s_addr ) == (p_addr_in -> s_addr & localnet_addr [i ].netmask .s_addr )) {
359+ PDEBUG ("bbbbbbbbbbbbbb\n" );
360+ }
361+ }
362+
363+ //if(!(SOCKFAMILY(*addr) == AF_INET && socktype == SOCK_STREAM)) {
364+ if ((SOCKFAMILY (* addr ) != AF_INET ) || (socktype != SOCK_STREAM )) {
371365 if (proxybound_allow_leak ) {
372366 PDEBUG ("allowing unproxified non tcp connect()\n" );
373367 return true_connect (sock , addr , len );
@@ -378,7 +372,8 @@ int connect(int sock, const struct sockaddr *addr, socklen_t len) {
378372 }
379373 }
380374
381- if (socktype != SOCK_STREAM ) {
375+ //Rejecting non local udp
376+ /*if (socktype == SOCK_DGRAM){
382377 if (proxybound_allow_leak) {
383378 PDEBUG("allowing unproxified udp connect()\n");
384379 return true_connect(sock, addr, len);
@@ -387,9 +382,11 @@ int connect(int sock, const struct sockaddr *addr, socklen_t len) {
387382 //exit(0);
388383 return -1;
389384 }
390- }
385+ }*/
386+
387+
388+
391389
392- p_addr_in = & ((struct sockaddr_in * ) addr )-> sin_addr ;
393390 port = ntohs (((struct sockaddr_in * ) addr )-> sin_port );
394391
395392#ifdef DEBUG
@@ -403,26 +400,13 @@ int connect(int sock, const struct sockaddr *addr, socklen_t len) {
403400 remote_dns_connect = (ntohl (p_addr_in -> s_addr ) >> 24 == remote_dns_subnet );
404401
405402 for (i = 0 ; i < num_localnet_addr && !remote_dns_connect ; i ++ ) {
406- if ((localnet_addr [i ].in_addr .s_addr & localnet_addr [i ].netmask .s_addr )
407- == (p_addr_in -> s_addr & localnet_addr [i ].netmask .s_addr )) {
403+ if ((localnet_addr [i ].in_addr .s_addr & localnet_addr [i ].netmask .s_addr ) == (p_addr_in -> s_addr & localnet_addr [i ].netmask .s_addr )) {
408404 if (!localnet_addr [i ].port || localnet_addr [i ].port == port ) {
409405 PDEBUG ("accessing localnet using true_connect\n" );
410406 return true_connect (sock , addr , len );
411407 }
412408 }
413409 }
414-
415- //Rejecting non local udp
416- if (socktype == SOCK_DGRAM ){
417- if (proxybound_allow_leak ) {
418- PDEBUG ("allowing unproxified udp connect()\n" );
419- return true_connect (sock , addr , len );
420- } else {
421- PDEBUG ("blocking unproxified udp connect()\n" );
422- //exit(0);
423- return -1 ;
424- }
425- }
426410
427411 flags = fcntl (sock , F_GETFL , 0 );
428412 if (flags & O_NONBLOCK )
@@ -441,6 +425,25 @@ int connect(int sock, const struct sockaddr *addr, socklen_t len) {
441425 return ret ;
442426}
443427
428+ /*
429+ ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen) {
430+ return true_sendto(sockfd, buf, len, flags, *dest_addr, addrlen);
431+ //return 0;
432+ }
433+
434+ ssize_t send(int sockfd, const void *buf, size_t len, int flags) {
435+ return true_send(sockfd, buf, len, flags);
436+ //return 0;
437+ }
438+ ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags) {
439+ return true_sendmsg(sockfd, *msg, flags);
440+ //return 0;
441+ }*/
442+
443+ //sendmsg
444+
445+ //ssize_t send(int sockfd, const void *buf, size_t len, int flags) {}
446+
444447//TODO: DNS LEAK: OTHER RESOLVER FUNCTION
445448//realresinit = dlsym(lib, "res_init");
446449//realresquery = dlsym(lib, "res_query");
@@ -496,7 +499,6 @@ void freeaddrinfo(struct addrinfo *res) {
496499 return ;
497500}
498501
499-
500502int getnameinfo (const struct sockaddr * sa , socklen_t salen , char * host , socklen_t hostlen , char * serv , socklen_t servlen , int flags ) {
501503 char ip_buf [16 ];
502504 int ret = 0 ;
0 commit comments