summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfadhil riyanto <me@fadev.org>2024-10-08 19:18:49 +0700
committerfadhil riyanto <me@fadev.org>2024-10-08 19:18:49 +0700
commitcbbaf6283ecb185d91192a2eadb0dc8e2ffc6048 (patch)
treea3f5ed1f47312923bbc6a24a5e89861d5a9c2197
parent8872aa62ae025f607d2959ef9884afb38a625f62 (diff)
parentb7eccb556bee7d172fb1426ab51e36e441242835 (diff)
Merge branch 'master' into ipv6
Signed-off-by: fadhil riyanto <me@fadev.org>
-rw-r--r--main2.c25
-rw-r--r--test/connect.c4
2 files changed, 26 insertions, 3 deletions
diff --git a/main2.c b/main2.c
index 332721d..cbfe2c8 100644
--- a/main2.c
+++ b/main2.c
@@ -617,6 +617,19 @@ static int start_unpack_packet(int fd, void* reserved, struct socks5_session *so
return 1;
}
+/*
+ o X'00' succeeded
+ o X'01' general SOCKS server failure
+ o X'02' connection not allowed by ruleset
+ o X'03' Network unreachable
+ o X'04' Host unreachable
+ o X'05' Connection refused
+ o X'06' TTL expired
+ o X'07' Command not supported
+ o X'08' Address type not supported
+ o X'09' to X'FF' unassigned
+*/
+
static int create_server2server_conn(int *fdptr, int atyp, u_int8_t *addr, u_int16_t port)
{
int ret = 0;
@@ -642,8 +655,15 @@ static int create_server2server_conn(int *fdptr, int atyp, u_int8_t *addr, u_int
ret = connect(tcpfd, (struct sockaddr*)&serv_addr, len);
if (ret == -1) {
+ ret = errno;
+
perror("connect()");
- return -1;
+ log_error("errno: %d", ret);
+
+ if (ret == 111) {
+ return 3;
+ }
+ // return -1;
}
*fdptr = tcpfd;
@@ -1061,6 +1081,9 @@ static int start_unpack_packet_no_epl(int fd, void* reserved, struct socks5_sess
close(fd);
return 0;
}
+ } else {
+ socks5_send_connstate(fd, 3, next_req->atyp, next_req->dest,
+ next_req->port);
}
} else if (buf[3] == 4) {
log_info("ipv6 conn requested");
diff --git a/test/connect.c b/test/connect.c
index 5b2ddf3..94fcd07 100644
--- a/test/connect.c
+++ b/test/connect.c
@@ -14,8 +14,8 @@ int main(int argc, char *argv)
struct sockaddr_in serv_addr;
memset(&serv_addr, 0, sizeof(struct sockaddr_in));
- serv_addr.sin_addr.s_addr = inet_addr("93.184.215.14");
- serv_addr.sin_port = htons(443);
+ serv_addr.sin_addr.s_addr = inet_addr("192.168.2.2");
+ serv_addr.sin_port = htons(3080);
serv_addr.sin_family = AF_INET;
socklen_t len = sizeof(struct sockaddr_in);