mirror of
https://github.com/rofl0r/proxychains-ng
synced 2026-06-04 14:03:34 +08:00
hook connect and getpeername
This commit is contained in:
+7
-2
@@ -131,7 +131,9 @@ typedef struct s_udp_relay_node {
|
||||
/* A structure to hold the chain of udp relay servers assiociated with a client socket */
|
||||
typedef struct s_udp_relay_chain {
|
||||
int sockfd; // the client socket for which the chain of relays has been set up
|
||||
udp_relay_node * head; // head of the linked list of udp_relay_node
|
||||
udp_relay_node * head; // head of the linked list of udp_relay_node
|
||||
struct sockaddr* connected_peer_addr; // used to store the address of the peer which the sockfd is connected to (in case connect() is used on the socket)
|
||||
socklen_t connected_peer_addr_len;
|
||||
struct s_udp_relay_chain * prev;
|
||||
struct s_udp_relay_chain * next;
|
||||
} udp_relay_chain;
|
||||
@@ -173,6 +175,7 @@ typedef ssize_t (*recvfrom_t) (int sockfd, void *buf, size_t len, int flags,
|
||||
typedef ssize_t (*sendmsg_t) (int sockfd, const struct msghdr *msg, int flags);
|
||||
typedef int (*sendmmsg_t) (int sockfd, struct mmsghdr* msgvec, unsigned int vlen, int flags);
|
||||
typedef ssize_t (*recvmsg_t) (int sockfd, struct msghdr *msg, int flags);
|
||||
typedef int (*getpeername_t) (int sockfd, struct sockaddr *restrict addr, socklen_t *restrict addrlen);
|
||||
|
||||
|
||||
extern connect_t true_connect;
|
||||
@@ -188,6 +191,7 @@ extern send_t true_send;
|
||||
extern sendmsg_t true_sendmsg;
|
||||
extern sendmmsg_t true_sendmmsg;
|
||||
extern recvmsg_t true_recvmsg;
|
||||
extern getpeername_t true_getpeername;
|
||||
|
||||
struct gethostbyname_data {
|
||||
struct hostent hostent_space;
|
||||
@@ -210,7 +214,7 @@ static int udp_associate(int sock, ip_type * dst_addr, unsigned short dst_port,
|
||||
udp_relay_chain* get_relay_chain(udp_relay_chain_list chains_list, int sockfd);
|
||||
void del_relay_chain(udp_relay_chain_list* chains_list, udp_relay_chain* chain);
|
||||
void add_relay_chain(udp_relay_chain_list* chains_list, udp_relay_chain* new_chain);
|
||||
int free_relay_chain_nodes(udp_relay_chain chain);
|
||||
int free_relay_chain(udp_relay_chain chain);
|
||||
udp_relay_chain * open_relay_chain(proxy_data *pd, unsigned int proxy_count, chain_type ct, unsigned int max_chains);
|
||||
int send_udp_packet(int sockfd, udp_relay_chain chain, ip_type target_ip, unsigned short target_port, char frag, char * data, unsigned int data_len, int flags);
|
||||
int receive_udp_packet(int sockfd, udp_relay_chain chain, ip_type* src_addr, unsigned short* src_port, char* data, unsigned int data_len );
|
||||
@@ -221,6 +225,7 @@ int is_from_chain_head(udp_relay_chain chain, struct sockaddr src_addr);
|
||||
int unsocksify_udp_packet(void* in_buffer, size_t in_buffer_len, udp_relay_chain chain, ip_type* src_ip, unsigned short* src_port, void* udp_data, size_t* udp_data_len);
|
||||
int socksify_udp_packet(void* udp_data, size_t udp_data_len, udp_relay_chain chain, ip_type dst_ip, unsigned short dst_port, void* buffer, size_t* buffer_len);
|
||||
int encapsulate_udp_packet(udp_relay_chain chain, socks5_addr dst_addr, unsigned short dst_port, void* buffer, size_t* buffer_len);
|
||||
void set_connected_peer_addr(udp_relay_chain* chain, struct sockaddr* addr, socklen_t addrlen);
|
||||
|
||||
#include "debug.h"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user