Knighthana
文章95
标签138
分类7

文章归档

网络连接问题及网络连接工具的问题集

网络连接问题及网络连接工具的问题集

网络连接问题及网络连接工具的问题集

熟练解决网络问题是程序员们的必修课

安装proxychains4

直接通过包管理器安装proxychains会安装proxychains3,这是一个很旧的版本(其实能用;

不过我为了排除各种问题,例如解决软件过旧之类的疑虑,最后安装了proxychains4,也被称为proxychains-ng,这是一个最新的实现;

假如不慎和我一样,并非通过包管理器,而是通过下载源码并且以sudo make install的方式安装的话,那么在/usr/local/bin中可以找到它的程序,不过这种方式不受包管理器记录和控制,对于日后的维护工作来说不太方便;

另外,proxyresolv功能默认没有安装,需要自己从源码的src/中拷贝出来放到PATH中,我的话是和proxychains4的二进制文件放在一起了;

proxychains4的四种dns_proxy设置

可以从 官方带有说明的配置文件 中获取到关于各种配置的详细说明

  1. 不设置任何dns proxy项目,也即不进行dns的代理,这种情况下,被proxychains4代理的程序会擅自(可能程序自己不这么觉得)调用系统的DNS请求相关功能,查询自己要访问的目的主机的IP地址,交给proxychains4的是一个IPv4地址;(然后proxychains4将这个IPv4原样传给端口监听程序,那边没有识别出来,完美地走了通常的通道,仍然慢速甚至断流,鼓掌!啪啪啪啪啪啪啪)

    为什么不效仿浏览器,直接从socks5里面传domain-name过去,非要自己去搞那个什么IP-address?很好玩吗?

  2. proxy_dns_old模式,这种模式下,被代理的程序还是会发出DNS请求,只不过请求被proxychains4截获,并且用一个proxychains4程序自己的proxyresolv脚本代为办理了,但是可能我技术水平有限,目前发现这个脚本只能设置DNS_SERVER=,但是基于众所周知的原因,这种形式并不稳定;

  3. dns_proxy模式,这种模式会发送domain-name给对应的port,但是,某些老旧的程序和脚本,例如我发现的(也是最常用的场合),oh-my-zshupgrade.sh并不支持这种模式,于是会卡在[proxychains] DLL init: proxychains-ng 4.16这条提示,天长地久,直到海枯石烂;(23/04/20:和ssh有关的话,可以怀疑是BUG导致的)

  4. proxydns_daemon模式,这目前是一个实验模式

    method 3. use proxychains4-daemon process to serve remote DNS requests.

    this is similar to the threaded proxy_dns method, however it requires

    that proxychains4-daemon is already running on the specified address.

    on the plus side it doesn't do malloc/threads so it should be quite

    compatible with complex, async-unsafe software.

    note that if you don't start proxychains4-daemon before using this,

    the process will simply hang.

    对于Linux内核版本大于等于5.9且proxychains4版本小于4.16-2(不等于)的使用者来说,如果要通过proxychains4使用ssh以及工作在ssh模式的git,就必须使用这个模式,

    因为新版本glibc中增加的new close_range syscall导致的此软件中close()钩子发生问题,而这个问题被修复的版本是4.16-2

被自己挖过的坑hosts文件坑

之前一直纳闷为什么某些请求始终是IPv4,起初以为是工具或者网站的问题,仔细一看地址再一回忆,原来我改过hosts文件。改回来就正常了。

总结

我还是需要找一些终端下更靠谱的工具,解决各种不稳定和断流的问题。

实在不行的话恐怕还得自己动手?

Knighthana

2023/01/14


更新:

修改了

proxychains4的四种dns_proxy设置

一节的内容

原因是:

ssh (and thus git) doesn't work anymore with proxydns and latest glibc #439

proxychains-ng doesn't work with ssh on Ubuntu 22.04

Knighthana

2023/04/20

修改了

我只知道它存在,但是没有找到任何有关这个东西的说明文档,

部分

原因是,其实是有说明文档的,位于GitHub: proxychains-ng/src/proxychains.conf

Knighthana

2023/05/02