sock代理服务原理(TCP穿透)

Sock学习1 (网络基本知识、Sock简介) 网络基本知识两台计算机之间的通信必须满足一下一些必然的条件1)两台主机需要一个唯一的标识,标识他们所在的位置(ip地址)2)他们需要有共同的源(协议)3)每台主机需要相应的端口号,每台主机有不同的应用程序通讯,每个通讯就是通过端口号来区分的。端口号的范围为0~65535,但是其中0~1023 被系统保留。TCP/IP协议TCP/IP协议 是目前世界上应用最广泛的协议。是以TCP/IP为基础的不同层... 阅读详情

原文转自:http://www.cppblog.com/zuhd/archive/2010/06/08/117366.html

sock代理分为sock4代理和 sock5代理。sock4支持TCP(事实仅支持TCP),无需用户名、密码验证;sock5支持TCP和UDP,根据代理服务器设置是否需要用户名、密码认证。TCP和UDP代理工作原理产不多,UDP代理网上多的是,google一下即可。这里只讲TCP代

理工作原理。
sock代理工作原理大致如下:
1。[需要代理方]向服务器发出请求信息;
2。[代理方]应答;
3。[需要代理方]接到应答后发送向[代理方]发送目的ip和端口;
4。[代理方]与目的连接;
5。[代理方]将[需要代理方]发出的信息传到目的方,将目的方发出的信息传到[需要代理方];
6。代理完成。
下面对sock4和sock5的代理工作原理流程分别详细说明,并给出示例代码。
sock4的TCP代理工作流程:
1。我们首先还是连接服务器,然后发送数据给服务器。由于是无用户密码验证,我们需要发送9个字节的数据,展开写为 04 01 + 目标端口(2字节) + 目标IP(4字节) + 00,其中目标端口和目标IP就是我们真正要连接的服务器端口和服务器地址;
2。代理服务器返回8字节的数据,我们只要判断第二字节是否为90即可,若是90连接成功,否则失败.剩下的操作和不存在代理服务器一样,可直接用发送\接受数据。
sock5的TCP代理工作流程:
1。向服务器的代理端口建立tcp连接。一般为1080;
2。向服务器发送 05 02 00 02(此为16进制码,以下同),让代理服务器选择认证方式 ;
05
02 这里确认2种认证方式 无需认证和需要认证,只需要验证一种方式,可以直接发送05 01 00查询服务器是否支持无认证代理方式;
00 不需要认证;
02 需要认证;
3。如果接到 05 00 则是可以代理或则05 02需要认证,这里只需要判断第二字节就行;
如果需要认证,需要向服务器发送01 用户名长度(2字节)用户名 密码长度(2字节)密码,然后接收服务器返回数据,如果第二字节为 00,则认证通过,否则无法认证,则连接失败;
4。发送 05 01 00 01 + 目的地址(4字节)+ 目的端口(2字节),目的地址和端口都是16进制码(不是字符串)。
例202.103.190.27 - 7201
则发送的信息为:05 01 00 01 CA 67 BE 1B 1C 21
(CA=202 67=103 BE=190 1B=27 1C21=7201)
5。接收代理服务器返回的数据,我们只要判断第二字节是否为00即表示代理连接完成;
6。以后操作和直接与目的方进行TCP连接相同。

//代理服务器登录
CString g_proxyserver = “”;
int g_proxyport = 1080;
CString g_proxyuser = “”;
CString g_proxypwd = “”;
int g_proxyid = 3; //2 - sock4代理 3 - sock5代理
char server_name[100]= {0}; //真正的服务器地址
int server_port=8000; //真正的服务器端口
SOCKET ConnecToProxyServer()
{
SOCKADDR_IN ToAddr;
SOCKET m_hSocketpop = socket(AF_INET, SOCK_STREAM ,0); // SOCK_DGRAM;
memset(&ToAddr, 0, sizeof(ToAddr));
ToAddr.sin_family = AF_INET;
ToAddr.sin_addr.s_addr = inet_addr(g_proxyserver);//这是我的SOCKS服务器
ToAddr.sin_port = htons(g_proxyport);
int retErr = connect(m_hSocketpop,(SOCKADDR*)&ToAddr,sizeof(ToAddr));
if(retErr == SOCKET_ERROR)
{
closesocket(m_hSocketpop);
return -1;
}
char buf[100] = {0};
if(g_proxyid == 3) //sock5 代理方式
{
// 让PROXY选择认证方法
buf[0] = 0x05;
buf[1] = 0x02; //确认2种认证方式 无需认证和需要认证
buf[2] = 0x00; // 无需认证
buf[3] = 0x02; // 需要认证
if(send(m_hSocketpop,(const far char*)buf,4,0) == SOCKET_ERROR)
{
closesocket(m_hSocketpop);
return -1;
}
Sleep(100);
if(recv(m_hSocketpop,buf,10,0) == SOCKET_ERROR)
{
closesocket(m_hSocketpop);
return -1;
}
if(buf[1] == 0x02)
{//需要认证
char userStr[128] = {0};
userStr[0]=0x01;
userStr[1]=g_proxyuser.GetLength();
strcpy(userStr+2,g_proxyuser);
userStr[2+g_proxyuser.GetLength()]=g_proxypwd.GetLength();
strcpy(userStr+3+g_proxyuser.GetLength(),g_proxypwd);
int result=send(m_hSocketpop,userStr,strlen(userStr), 0);
if(result == SOCKET_ERROR)
{
closesocket(m_hSocketpop);
return -1;
}
Sleep(100);
char validateChar[2] = {1};
result=recv(m_hSocketpop,validateChar,2, 0);
if(result == SOCKET_ERROR)
{
closesocket(m_hSocketpop);
return -1;
}
if(validateChar[1]!=’\x00’)
{//认证失败
closesocket(m_hSocketpop);
return -1;
}
}
// 向PROXY服务器发送CONNECT 请求,
memset(buf, 0, 100);
buf[0] = 0x05;
buf[1] = 0x01; // connection request.
buf[2] = 0x00; // reserved!
buf[3] = 0x01; // address type:Ip V4 ;
((ULONG)(buf+4))=inet_addr(server_name);
((USHORT)(buf+8))=htons(server_port);
if(send(m_hSocketpop,(const far char*)buf,10,0) == SOCKET_ERROR)
{
closesocket(m_hSocketpop);
return -1;
}
Sleep(100);
// 接收PROXY服务器返回的REPLY
memset(buf, 1, 100);
if(recv(m_hSocketpop,buf, 20,0) == SOCKET_ERROR)
{
closesocket(m_hSocketpop);
return -1;
}
if(buf[1] != 0) // 只有当第二个字节为0时,才表示成功。
{
// printf(“Cannot connect to the remote server!\n”);
closesocket(m_hSocketpop);
return -1;
}
// theApp.m_ClientSocket.Attach(m_hSocketpop);
}
if(g_proxyid == 2) //sock4 代理方式
{
int result;
memset(buf, 0, 100);
buf[0] = 0x04;
buf[1] = 0x01; // connection request.
((USHORT)(buf+2))=htons(server_port);
((ULONG)(buf+4))=inet_addr(server_name);
buf[8] = 0x00;
result = send(m_hSocketpop, (const far char*)buf, 9, 0);
if(result == SOCKET_ERROR)
{
closesocket(m_hSocketpop);
return -1;
}
Sleep(100);
char EchoStr[10];
memset(EchoStr,0,10);
result=recv(m_hSocketpop,EchoStr,8, 0);
if(result == SOCKET_ERROR)
{
closesocket(m_hSocketpop);
return -1;
}
if(EchoStr[1] != 90)
{
closesocket(m_hSocketpop);
return -1;
}
// theApp.m_ClientSocket.Attach(m_hSocketpop);
}
return m_hSocketpop;
}
调用方式:
strcpy(server_name, theApp.m_ServerIP);
server_port = 8080;
SOCKET m_socket = ConnecToProxyServer();
if(m_socket == -1)
{
return 0;
}
int type = 1000;
send(m_socket, (char*)&type, sizeof(int), 0);

SOCK5如何用代理UDP连接

1。向服务器的1080端口建立tcp连接

2。向服务器发送 05 01 00

3。如果接到 05 00 则是可以代理

4。发送 05 03 00 01 00 00 00 00 + 本地UDP端口(2字节)

5。服务器返回 05 00 00 01 +服务器地址+端口

7.需要申请方发送
00 00 00 01 +目的地址IP(4字节)+目的端口 +所要发送的信息

8。当有数据报返回时
向需要代理方发出00 00 00 01 +来源地址IP(4字节)+来源端口 +接受的信息

使用sock5代理时TCP数据:
客户端 sock5服务器
SYN
ACKSYN
ACK
05 01 00 00 00 00
05 00 00 00 00 00
05 01 00 03 0E 31 39 32 2E 31 36 38 2E 37 35 2E 31 31 34 00 6E (…..192.168.75.114.n)
05 00 00 01 C0 A8 4D 56 08 D4
ACK
+OK X1 NT-POP3 Server iflytek.com (IMail 8.15 228888-9)..
USER hjma..
+OK send your password..
PASS xxxxxxx..
+OK maildrop locked and ready..
STAT..
+OK 0 0..
QUIT..
+OK POP3 Server saying Good-Bye..
ACKFIN
ACK
ACKFIN
ACK

出处:http://www.cnblogs.com/zhangdongsheng/

SOCK5代理服务器透明穿透技术  SOCK5代理服务器透明穿透技术一、目标(Target)在尽量不改变现有代码的情况下,透明穿越socks 5代理。二、技术分析(Technology Analyse)2.1 sock 5 代理分析由于目前socks规范中,socks4不支持UDP,只有socks5才支持,而目前视频应用中,码流传输采用的是UDP,所以如果客户端只支持SOCK4代理,则视频应用将受到限制。从 阅读详情

相关推荐

UDP打洞原理与N2N内网穿透

UDP打洞原理与N2N内网穿透技术

qq_19393857的博客 5216

ccproxy使用指南

目的:虚拟机中需要访问外网,下载东西 开始做一个好运维 2021-12-16 1.ccproxy是什么? CCProxy是一个国产的支持HTTP、FTP、Gopher、SOCKS4/5、 Telnet、Secure(HTTPS)、News(NNTP)、 RTSP、MMS等代理协议的代理服务器软件 2.原理是什么? 对Web客户端来说,代理就是扮演服务器的角色,接受请求报文,返回响应报文。 对Web服务端来说,代理扮演的是客户端角色,发送Web请求报文,接受Web响应报文。 3.window..

1万+

树莓派实现内网穿透

树莓派实现内网穿透 一、实验材料 能连上公网的树莓派、一台具有公网ip的云服务器 二、实验原理 使用frp服务作为内网穿透,云服务器作为frp服务端,开放一个端口作为流量转发,不同网段的设备可通过云服务器的端口连接到树莓派 frp 一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。 为什么使用 frp ? 通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网

weixin_43869261的博客 3812

转载的socks4 socks5 rfc1928一大堆

SOCKS协议最初由David Koblas设计,后经Ying-Da Lee改进成SOCKS 4协议。SOCKS4协议主要是如下几个RFChttp://ftp.icm.edu.pl/packages/socks/socks4/SOCKS4.protocolhttp://www.rfc-editor.org/rfc/rfc1928.txthttp://www.smartftp.com/Products/SmartFTP/RFC/socks4a.protocolSOCKS 4只支持TCP转发。请求报文格式如下:

laotse的专栏 2万+

自动驾驶入门到进阶完整指南:感知、预测、规划、端到端、仿真测评与场景挖掘全解析

对小白来说,不建议一开始直接冲端到端大模型。先学数据和坐标系:否则所有结果都看不懂。再学 LiDAR 3D 检测:最容易建立空间感。再学 BEV/多相机感知:这是当前主流。再学轨迹预测:理解交互和多模态。再学规划控制:理解车为什么这样开。再学仿真和闭环评测:理解 open-loop 和 closed-loop 差异。最后学端到端/VLM/VLA:这时候你才知道它到底替代了哪些模块。贯穿始终学习场景挖掘和安全测评:这是工业界最核心的能力之一。

u013250861的博客 394

保姆级教程:用YOLOv8n模型在RKNN和Horizon平台完成目标检测(附C++部署代码与性能实测)

本文提供了一份详尽的YOLOv8n模型在RKNN和Horizon平台上的部署指南,涵盖环境配置、模型优化、跨平台适配及性能调优。通过实战案例和C++部署代码,帮助开发者在嵌入式设备上高效实现目标检测,显著提升推理性能。

weixin_42659194的博客 468

QNX使用多网卡后无法使用ifconfig命令修改IP地址

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33843947的博客 1159

BUCK电路为何无法实现100%占空比?自举电路原理与替代方案解析

在开关电源设计中,DC-DC转换器是实现电压变换的核心器件,其工作原理基于功率开关管的周期性导通与关断。BUCK(降压)电路作为一种经典拓扑,通过调节开关管的占空比来控制输出电压。然而,其占空比存在理论上限,无法达到100%,这一限制源于高边开关管的驱动需求。为了驱动高边N沟道MOSFET(NMOS),需要栅极电压高于源极电压,而自举(Bootstrap)电路通过利用开关节点电压的跳变,巧妙地生成了这一高压驱动信号。自举电路必须在每个开关周期内存在续流阶段(低边管导通)为电容充电,这从根本上限制了最大占空比

weixin_32239523的博客 309

Socket套接字通信 TCP UDP详解(网络通信)

所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议根进行交互的接口。Socket(套接字)可以看成是两个网络应用程序进行通信时,各自通信连接中的端点,这是一个逻辑上的概念。......

qq_41796226的博客 3630

ESP32语音交互实战:离线唤醒与DeepSeek大模型集成

本文详细介绍了如何将ESP32-S3开发板与天问ASRPRO语音模块结合,实现离线语音唤醒并集成DeepSeek大模型的智能交互系统。通过串口通信与API调用,系统可处理本地指令及复杂语义请求,适用于低成本、高隐私保护的AIoT语音交互场景。

rust6ferris的博客 869

OpenBmc开发11:添加传感器(I2C)

1 查看传感器信息 通过qemu以本地端口映射方式运行编译后的镜像,访问bmcweb页面的网址是:https://localhost:2443/,如果想用IP地址启动请参考:openbmc开发4:启动运行编译镜像。(这里以网桥方式启动,以ip地址方式访问BMC) 输入用户名和密码,密码是:0penBmc(第一个是数字)。 选择Health,然后点击Sensor,可以看到传感器信息。 2 查看传感器配置文件 进入meta-live/meta-test/recipes-phosphor/...

master 1万+

网络穿透:TCP 打洞、UDP 打洞与 UPnP

TCP 打洞(TCP Hole Punching)是一种使 NAT 后的两个客户端通过第三方服务器建立直接连接的方法。NAT 通常会阻止外部主机直接与内部主机通信,因此需要借助外部服务器来协调连接。UDP 打洞(UDP Hole Punching)与 TCP 打洞类似,是一种让处于 NAT 后的两台主机通过第三方服务器建立直接 UDP 连接的技术。与 TCP 不同的是,UDP 是无连接的协议,允许 NAT 主机更容易接受来自外部的连接请求。

四楼没电梯的专栏 4970

eNSP-Pro配置又丢了?手把手教你用导出功能防患于未然

本文详细介绍了eNSP-Pro配置防丢失的全套方案,包括运行时内存、虚拟存储设备和宿主机文件系统的配置存储机制,以及多维度备份策略和特殊场景下的恢复技巧。通过优化保存流程、自动化定时导出和版本化管理,帮助网络工程师有效防止配置丢失,提升工作效率。

weixin_42665725的博客 242

<转>sock代理服务原理(TCP穿透)

原文转自:http://www.cppblog.com/zuhd/archive/2010/06/08/117366.html sock代理分为sock4代理和 sock5代理。sock4支持TCP(事实仅支持TCP),无需用户名、密码验证;sock5支持TCP和UDP,根据代理服务器设置是否需要用户名、密码认证。TCP和UDP代理工作原理产不多,UDP代理网上多的是,google一下即可。这里...

weixin_30443075的博客 334

A Side Scan Sonar Image Denoising Algorithm Based on Compound of Fuzzy Weighted Average and Kalman F

Abstract 水下侧扫声纳图像的噪声来源:高斯噪声、脉冲、斑点噪声。 传统方法只能移除部分噪声,并且去噪后容易造成细节模糊。 本文在考虑到噪声的随机性以后,提出一种融合了模糊加权平均和卡尔曼滤波的去噪方法。 在最大化保留图像细节的基础上,同时去除高斯噪声和脉冲噪声 一.Introduction 由于海底环境和声波自身干涉的影响,声纳图像生成的图像难免会有噪点。声纳采集的图像通常会有高斯噪声、脉...

qq_44516871的博客 928

YOLOv8推理程序

YOLOv8单独推理,有时候我们自定义的模块算子无法正常转换为其他框架,而且需要做成应用,因此需要一个单独推理的程序,返回的是识别后的照片还有各个类别及其对应数量。文章最后给出Flask封装为Server以及调用的实例还有Client请求代码,支持几十路多线程并发,只需加载一次模型,后边推理即可。

AIOT魔法师 698

用TCP穿透NAT(TCP打洞)的实现

1. TCP穿透原理:     我们假设在两个不同的局域网后面分别有2台客户机A和 B,AB所在的局域网都分别通过一个路由器接入互联网。互联网上有一台服务器S。      现在AB是无法直接和对方发送信息的,AB都不知道对方在互联网上真正的IP和端口, AB所在的局域网的路由器只允许内部向外主动发送的信息通过。对于B直接发送给A的路由器的消息,路由会认为其“不被信任”而直接丢弃。     

晴天的专栏 1821

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

穿透Socks5的UDP

网络编程中,对于数据传输实时性要求较高的场合,大家都会选择UDP来作为数据传输协议,在TCP/IP协议族中UDP协议较TCP协议需要的网络系统资源更少。然而在企业应用中,由于网络安全原因等会导致除了特定端口以外的IP数据无法通过专用的路由或网关。为了支持这类应用,制定了专门的支持Socks连接的socks4/socsk5协议。Socks协议允许实现此类功能的代理软件可以允许防火墙(本

zhhxidian2005的专栏 1597

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

TCP穿透的方法

【代码】TCP穿透的方法。

yeshen.org 769

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Http 代理穿透

HTTP代理服务器中能够提供一种HTTP CONNECT代理服务,能够允许用户建立TCP连接到任何端口。通过CONNECT方法穿透代理的实现方法为:CONNECT代理服务器的代理端口(如:8080);如果成功返回就可以按照正常的Socket进行通讯。当然在此之前需要先获得代理相关的信息。如何获取HTTP代理相关信息。

零落年华的专栏 542

破壁者指南:内网穿透技术的深度解构与实战方法

内网穿透技术:实现NAT后服务访问的关键方案 摘要: 内网穿透技术是解决NAT后服务访问的核心方案,主要包括UDP打洞、TCP打洞、中继转发等关键技术。本文系统介绍了内网穿透的技术背景、核心原理和实现方法:首先分析了NAT环境下的网络连接挑战,然后详细阐述了STUN协议检测NAT类型的方法,并通过代码示例展示了UDP打洞的具体实现过程。此外,文章还分类整理了各类穿透技术(直接连接、打洞技术、中继转发和协议辅助),并通过流程图直观呈现技术体系结构。该技术在现代微服务架构、远程办公等场景中具有重要应用价值,其混

Jaxonic的博客 1834

如何实现 子网穿透

子网穿透是指在存在 NAT(网络地址转换)设备的网络环境中,使得两个位于不同私有子网的设备能够建立直接通信。NAT 通常隐藏私有网络设备的 IP 地址,阻碍外部设备直接访问内部设备。

抟土成人祖,炼石补青天。眼中览银河,手可摘星辰。 1339

UDP穿透原理及实现

本文介绍了UDP穿透技术实现跨局域网通信的原理与实现。

LWD的博客 1353

常见内网穿透工具使用总结

链接:http://v0w.top/2020/08/11/IntranetProxy/0x00 前言本文以渗透的视角,总结几种个人常用的内网穿透,内网代理工具,介绍其简单原理和使用方法。0...

code小生 480
上一篇: HTTP 隧道 (HTTP代理Socket客户) (转)
下一篇: 关于设置http响应头connection的作用
whackw
博客等级 码龄16年 203粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值