理论:在理论上,我们经由过程端口复竽暌姑技巧,不会对其他占用此端口的法度榜样或者过程造成影响,因为我们设置了 socket 为 SO_REUSEADDR ,监听 0.0.0.0:80 和监听 192.168.1.1:80 或者监听 127.0.0.1:80 ,他们的地址是不合的,创建了法度榜样或者过程所接收到的流量是互相不影响的,多个线程或过程互不影响。
这里有一个 ClientThread() 函数,这个函数是须要在 main() 函数琅绫擎调用的(见如上代码),这里创建一个套接字来连接本地的 3389 端口,用 while 轮回来处理复竽暌姑交互的数据, 80 端口监听到的数据发送到本地的 3389 端口膳绫擎去,大年夜本地的 3389 端口攫取到的数据用 80 端口的套接字发送出去,这就构成了端口复竽暌姑的重定向,当然在这个处所可以像膳绫擎python代码一样,在中心加一个数据断定前提,大年夜而包管数据流向的完全和靠得住和精准性。
- //创建线程
- DWORD WINAPI ClientThread(LPVOID lpParam)
- {
- //连接本地目标3389
- saddr.sin_family = AF_INET;
- saddr.sin_addr.s_addr = inet_addr("127.0.0.1");
- saddr.sin_port = htons(3389);
- if ((conn_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == SOCKET_ERROR)
- {
- printf("[-] error!socket failed!//n");
- return -1;
- }
- val = 100;
- if (setsockopt(conn_sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&val, sizeof(val)) != 0)
- {
- ret = GetLastError();
- return -1;
- }
- if (setsockopt(ss, SOL_SOCKET, SO_RCVTIMEO, (char *)&val, sizeof(val)) != 0)
- {
- ret = GetLastError();
- return -1;
- }
- if (connect(conn_sock, (SOCKADDR *)&saddr, sizeof(saddr)) != 0)
- {
- printf("[-] error!socket connect failed!//n");
- closesocket(conn_sock);
- closesocket(ss);
推荐阅读
Netcraft 10月Web服务器排名:Nginx首超微软排第二
Netcraft 宣布了2017年10月 Web 办事器查询拜访申报,本月 Netcraft一共统计了1,815,237,491 个站点和 6,886,362 台收集计算机,排名前三的依然是 Microsoft、Apache 和 nginx 。在 10 月>>>详细阅读
本文标题:聊聊端口复用的实现和坑点
地址:http://www.17bianji.com/lsqh/38630.html
1/2 1