原生socket穿透HTTP代理服务器



    WinInet库接口穿越代理服务器曾经提到过WinInet穿透代理服务器可行(传输大文件或大数据包,不能保证续传),而原生socket时如果服务器需要认证则会失败,后来经过研究后,我们是搞定了的。下面简单说一下:

代理服务器(如ISA服务器)的认证种类有多中,如Basic、NTLM、Digest等单类或多类的组合。

1、Basic认证

第一步、和服务器的初次数据交换后,检查包含"Proxy-Authenticate: Basic"的应答信息,则表示服务器可以采用Basic认证方式,当然也可能同时包含其他认证方式,只要通过一种方式认证即可。

第二步、使用sUser、sPasswd信息的Base64位编码组合,再次和服务器进行交互(指明以Basic方式认证)。如果成功,则认证通过;否则,为用户密码信息错误;

2、NTLM认证

第一步、和服务器的初次数据交换后,检查包含"Proxy-Authenticate: NTLM"的应答信息,则表示服务器可以采用NTLM认证方式,当然也可能同时包含其他认证方式,只要通过一种方式认证即可。

第二步、使用sHost、sDomain信息的Base64位编码组合,再次和服务器进行交互(指明以NTLM方式认证)。如果成功,则成功则继续下一步;否则,为主机及域名信息错误;

第三步、根据第二步获取的应答数据进行解析,并使用本地已知的sUser、sPasswd信息的Base64编码进行数据组装,再次和服务器进行交互(指明以NTLM方式认证)。如果成功,则认证通过;否则,为用户密码信息错误;

3、Digest认证

如NTLM类似

这是几年前预研的结果,如有需要的朋友,可以和我联系,我帮着找找看。

原生socket穿透HTTP代理服务器,布布扣,bubuko.com

时间: 2024-10-26 08:06:17

原生socket穿透HTTP代理服务器的相关文章

消息推送学习一、原生Socket的使用

消息推送也是客户端和服务器连接然后进行交互的一种形式,但是不同于HTTP的连接,这种连接需要长时间的进行,当有消息时可以及时推送到客户端.除此之外还有多个用户,可能需要针对其身份进行不同的推送等等要求.而这种连接的形式在Java中可以使用Socket进行实现. 一.第一版: 1.首先是服务器部分,重要的操作说明 ①使用ServerSocket可以开启服务器上的一个端口进行连接监听,类似于服务器监听80端口. ②使用accept(),阻塞式的等待客户端的接入.接入成功时返回连接的Socket对象.

原生socket请求url获取状态码、消息报头、响应正文

需求: 1 (1)使用socket及ssl模块写通用的web客户端 2 (2)向服务器发起请求 3 (3)接受响应内容并解析出状态码.消息报头.响应正文 4 (4)最核心的函数: 输入一个url,返回状态码.消息报头.响应正文:当然这也是最后实现的效果 知识储备: 网络基础知识 python的web编程(socket) 最后实现代码: 1 # __author__ = "wyb" 2 # date: 2018/6/5 3 # 代码: 高内聚低耦合 -> 使用函数封装一些逻辑代码

让Socket穿透Windows防火墙

创建了ServerSocket以后,并不是没事了,其实上,为了系统安全考虑,创建服务器套接字后,只是创建成功了,但是在数据包入站的时候呢,会被防火墙过滤,因此,我们就收不到来自网络的数据了. 因此,在系统的默认安全级别下,当一个程序第一次创建ServerSocket时,系统会弹出一个这样的对话框: 除非用户同意,点“运行访问”,否则就没办法通信,而你的程序,收不到半点异常 因为防火墙不是阻止的服务器套接字的创建,而是阻止来自网络的数据包入站! 但关键的问题是,这个对话框里的东西写的太那啥了,所以

Socket 学习(三).4 DUP 穿透 客户端与客户端连接

效果图: 使用方法:  先 修改WinClient\bin\Debug  下面的 ip.ini,写上 服务器 IP地址. 客户端 与 客户端 通讯 之前 ,点击发送打洞消息 按钮,然后过一会再发送消息. 代码 很多, 参见: http://www.cnblogs.com/LeoWong/archive/2009/09/25/1574266.html 已经放在  MVC EF Bootstrap技术交流   206058845    里面的文件里面了.感兴趣的可以去下载.文件名 Socket穿透.

用socket操作redis

代码: $cmd = "*3\r\n$3\r\nSET\r\n$3\r\nfoo\r\n$3\r\nbar\r\n"; // set foo bar $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_connect($socket, '127.0.0.1', 6379); $flag = socket_write($socket,$cmd,strlen($cmd)); eee($flag); reids 协议采

Python之路【第九篇】:Python基础(26)——socket server

socketserver Python之路[第九篇]:Python基础(25)socket模块是单进程的,只能接受一个客户端的连接和请求,只有当该客户端断开的之后才能再接受来自其他客户端的连接和请求.当然我 们也可以通过python的多线程等模块自己写一个可以同时接收多个客户端连接和请求的socket.但是这完全没有必要,因为python标准库已经为 我们内置了一个多线程的socket模块socketserver,我们直接调用就可以了,完全没有必要重复造轮子. 我们只需简单改造一下之前的sock

Go语言TCP Socket编程

Golang的主要 设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端 程序必不可少也是至关重要的一部分.在日常应用中,我们也可以看到Go中的net以及其subdirectories下的包均是"高频+刚需",而TCP socket则是网络编程的主流,即便您没有直接使用到net中有关TCP Socket方面的接口,但net/http总是用到了吧,http底层依旧是用tcp socket实现的. 网络编程方面,我们最常用的就是tcp socket编程了,在posix标准出来后,s

python网络编程——socket进阶篇(select/poll/epoll)

原 生socket客户端在与服务端建立连接时,即服务端调用accept方法时是阻塞的,同时服务端和客户端在收数据(调用recv)时也是阻塞的.原生 socket服务端在同一时刻只能处理一个客户端请求,即服务端不能同时与多个客户端进行通信,实现并发,导致服务端资源闲置(此时服务端只占据 I/O,CPU空闲). 现在的需求是:我们要让多个客户端连接至服务器端,而且服务器端需要处理来自多个客户端请求.很明显,原生socket实现不了这种需求,此时我们该采用什么方式来处理呢? 解决方法:采用I/O多路复

bsd socket 简单封装。支持android、ios、mac osx

cocos2d-x官方没有封装原生socket,只提供了websocket,如果我们需要socket,不同团队有不同的造轮子的方案,其中使用Asio库的比较多,但是Asio库太过于庞大,我不太想用.其实只需要简单封装一下bsd socket就好了,几十行代码而已. 注意如果在android中测试,需要添加网络访问权限,而且不能在主线程中使用. 贴一发代码,只是简单测试了下,如果有问题再慢慢完善. 1 #ifndef __cpp_test__Socket__ 2 #define __cpp_tes