Skip to content

分析协议构造验证数据,采用异步非阻塞socket发送数据,不采用request的方式。

Notifications You must be signed in to change notification settings

gjl3189/ScanProxy

 
 

Repository files navigation

ScanProxy

分析协议构造验证数据,采用异步非阻塞socket发送数据,不采用request的方式。

采用非阻塞的connect,每个IP测试4个端口。

之前没分清国内和国外的IP段,导致去扫国外的,一片超时。所以才有下文的超时处理,但是国内一般不会涉及到超时。但这里还是要说下自己的想法。

首先采用非阻塞的connect,会立即返回,如果返回EINPROGRESS,表明正在连接属于正常,在此期间使用getsockopt(socket.SOL_SOCKET, socket.SO_ERROR)获取socket的错误,无论对于正在连接还是连接完成都返回0,直到出现超时异常或其他错误,才返回其他错误码。

如果我们提前做超时异常处理,如何做?

假如三次握手包,要在网络中存在N秒多,那这几秒内,没有函数去判断是否连接完成,因为处在正在连接的过程中,getsockopt(socket.SOL_SOCKET, socket.SO_ERROR)对于正在连接连接完成的socket都返回0。但是我们可以通过read()或者send()或者getpeername()报异常,来判断。

几个注意点:

  • 1.IP的区段 http://ips.chacuo.net/
  • 2.非阻塞connect的返回码'EINPROGRESS',表示正在连接
  • 3.http代理的验证方式,send一段http报文,验证返回.

Http代理

当你发送CONNECT %s:%s HTTP/1.1\r\nHost: %s:%s\r\nProxy-Connection: keep-alive\r\n\r\n,接收到的response包含b'Connection established'表明,可以作为代理

Socks5代理

当你发送b'\x05\x02\x00\x02',接收到的data包含b'\x05\x00',可以作为代理,这里仅仅是简单说明,但其中还涉及到验证等等复杂问题。

About

分析协议构造验证数据,采用异步非阻塞socket发送数据,不采用request的方式。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%