使用netcat构建的代理不允许http基本身份验证

时间:2013-05-13 16:40:31

标签: proxy netcat http-basic-authentication

我使用nc创建了一个简单的代理服务器,这里是一行代码:

mkfifo queueueue
nc -l 8080 <queueueue | nc http://$JENKINS_HOSTNAME 80 >queueueue

它侦听端口8080,然后将数据转发到与Jenkins服务器的连接。 Jenkins是VPN的后面,我运行此代理的机器具有VPN访问权限。

在我的另一台机器上(没有VPN访问),我想curl Jenkins服务器,这是通过代理发起请求的命令:

http_proxy=10.1.10.10:8080 curl --user $JENKINS_USERNAME:$JENKINS_PASSWORD http://$JENKINS_HOSTNAME/api/json

客户端和代理机器都在同一个网络上,我可以在它们之间ping和ssh,而且,我知道客户端正在连接到代理服务器,我认为当客户端尝试连接时出现故障验证,这是我尝试卷曲时的输出:

$ http_proxy=10.1.10.10:8080 curl --user $JENKINS_USERNAME:$JENKINS_PASSWORD http://$JENKINS_HOSTNAME/api/json
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="<some other url>">here</a>.</p>
<hr>
<address>Apache Server at $JENKINS_HOSTNAME Port 80</address>
</body></html>

如何通过HTTP基本身份验证来完成这样的代理?

1 个答案:

答案 0 :(得分:1)

我会使用ssh而不是netcat。

只是为了避免混淆,我将把具有VPN访问权限的节点称为“服务器”,将没有VPN访问权限的节点称为“客户端”。

在服务器端,您只需安装并运行ssh服务器(在我的测试中,我有OpenSSH_5.9p1,OpenSSL 0.9.8r 2011年2月8日)。

在客户端,您需要执行以下操作:

1)在/ etc / hosts文件中添加目标URL在服务器上解析的地址。我无法通过代理运行DNS查找,这就是为什么这是必要的。

2)在服务器和客户端之间设置ssh密钥。虽然这不是必要的,但它会让生活更轻松。

3)运行以下ssh命令让ssh充当SOCKS代理:

user@host$ ssh -vND 9999 <server>

-v在那里你可以看到ssh发生了什么, -N告诉ssh不执行远程命令 - 这对于简单的端口转发很有用 -D此选项实际上是将您的本地请求转发给服务器

4)现在你应该可以运行上面的curl命令了,但是加入

---socks5 localhost:9999

您的完整命令将如下所示:

curl --user $USER:$PASSWORD --socks5 localhost:9999 http://$JENKINS/api/json

如果我能弄清楚如何通过ssh从curl转发DNS请求,我将更新故障单。

编辑:格式化,可怕的语法。