【发布时间】:2012-03-07 09:46:09
【问题描述】:
我正在编写 C 代码,试图为一些网络实践创建一个非常基本的代理服务器。我的目标是使用我的代理从浏览器获取“GET”请求,然后将其转发到适当的服务器,从服务器获取信息,然后将所有数据发送回浏览器。到目前为止,我得到了第一部分的工作,即我得到了 GET 命令的内容。现在我真的被困在“转发”部分。我如何将 GET 的内容转发到它应该去的地方,比如 www.example.com 并取回该信息?我显然不能使用相同的套接字描述符并尝试使用发送命令,因为那样我会将 GET 命令发送回试图将其发送出去的浏览器。我一直在使用 Beej 的指南和随机在线提示。这不是我的第一个网络程序,但我肯定被困在这里。我以为我必须对主机(在 GET 中)进行 DNS 查找,获取 IP,然后使用 getaddrinfor + connect 但随后连接会给出连接被拒绝的错误。任何提示或提示都会对我很有帮助..谢谢
编辑:我在堆栈上关注了另一个答案,详细说明了所涉及的步骤。基本上我已经完成了“重建/发送新请求部分”
Open port
Listen on port
Get all request sent from the client to that port (maybe make the whole thing multithreaded to be able to handle more than 1 request at a time)
Determine if it is a valid HTTP 1.0 request
Extract the request components
Rebuild the request according to what type of proxy you are
Send the new request
Get the response
Send response to client
edit2:HTTP 1.1 代理
【问题讨论】:
-
如果目标服务器关闭,您将无能为力。 getaddrinfo() 可能返回多个 addrinfo 结构,你检查所有的吗?
-
您具体实现了什么样的代理? HTTP 代理? SOCKS 代理?
标签: c sockets networking proxy