2 force TCP connections to come from a specific IP
5 gcc -o connectfrom.so -fPIC -shared -o connectfrom.so connectfrom.c -ldl
11 #include <sys/types.h>
14 #include <sys/socket.h>
15 #include <netinet/in.h>
16 #include <arpa/inet.h>
18 int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen)
20 static int (*real_connect)(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen);
21 const char *address = getenv("CONNECTFROM");
24 real_connect = dlsym((void*)-1, "connect");
28 struct sockaddr_in myaddr;
29 socklen_t myaddrlen = sizeof(myaddr);
30 myaddr = *(struct sockaddr_in *)serv_addr;
31 inet_aton(address, &myaddr.sin_addr);
34 bind(sockfd, (struct sockaddr *)&myaddr, myaddrlen);
37 return real_connect(sockfd, serv_addr, addrlen);