https://github.com/L-codes/Neo-reGeorg
2.0作者做了不少改动,修改日志如下
1 2 3 4 5 6 7 8 9 10 | 实现单 Session 多 TCP 会话,解决部分环境仅支持单 Session HTTP 通讯导致的无法使用 支持同服务器多 URL 的请求路径,避免单路径访问频率过高 支持自定义服务端的 HTTP 响应码 修改了部分指令为 GET , 更接近正常请求 去除空行与去除部分特征 支持服务端的 DNS 解析,并默认使用 (使用本地 DNS 解析用 `--local-dns`) 优化了错误信息输出 修改了目录名称 scripts/ => templates/ 和 neoreg_server/ => neoreg_servers/ 移除 socks4 的支持 移除 javascript tunnel 支持 |
因为php问题,原本1.5 和我之前的修改思路差不多,会增加一条指令用于初始化session,CONNECT时主动断开来保证不阻塞,而2.0取消了这种做法。
简单看了下各个脚本,均多了一个默认选项,在第一次发起请求时,不带任何头部字段,然后直接返回一个session
第二次请求开始,提交X-CMD头部字段,该字段不同以往的,除了指令以外,还新增了一个长度22的mark前缀,可以看到拼接到读写缓冲区的名称里,这样每次新的连接,均可以使用同一个会话,因为他们缓冲区名称在单个会话里并不冲突
那么还有一点,因为php的socket是资源类型,无法保存在会话里,所以CONNECT请求时就是while循环,原本是主动超时断开连接,2.0版本比较巧妙,通过stream_set_blocking来设置为非阻塞模式,原本也是想找到这么一个函数,可惜之前没找到。
PS: 这里是做了字段混淆
还有一个比较好的功能,返回状态码设置为404,提供的参考命令
1 2 | $ python neoreg.py generate -k <you_password> --file 404.html --httpcode 404 $ python neoreg.py -k <you_password> -u <server_url> --skip |
怎么实现的呢,在各个脚本插入一段设置响应状态码的代码即可
1 2 3 4 5 6 7 8 | # php @http_response_code(404); # jsp response.setStatus(404); # aspx Response.StatusCode = 404; |
效果如下
其实我主要比较好奇的是2.0针对php之前的问题是怎么处理的,就顺便分析了下其他功能,目前暂时用到的就以上功能,其他的话以后用到再看看