代理/Socks C# 问题
Posted
技术标签:
【中文标题】代理/Socks C# 问题【英文标题】:Proxy/Socks C# problem 【发布时间】:2011-03-14 23:10:24 【问题描述】:如何将 proxy/socks4/socks5 添加到 C# Socket。
我需要使用它抛出 Socket。 我不想使用 WebRequest 和任何类。
private static Socket ConnectSocket(string server, int port)
Socket s = null;
IPHostEntry hostEntry = null;
// Get host related information.
hostEntry = Dns.GetHostEntry(server);
// Loop through the AddressList to obtain the supported AddressFamily. This is to avoid
// an exception that occurs when the host IP Address is not compatible with the address family
// (typical in the IPv6 case).
foreach (IPAddress address in hostEntry.AddressList)
IPEndPoint ipe = new IPEndPoint(address, port);
Socket tempSocket =
new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
tempSocket.Connect(ipe);
if (tempSocket.Connected)
s = tempSocket;
break;
else
continue;
return s;
public static string SocketQuery(string Url, int Port, string Method = "GET", string Cookie = "", string DataFields = "")
string host = ExtractDomainAndPathFromURL(Url);
string request = Method.ToUpper() + " " + ExtractDomainAndPathFromURL(Url, 2) + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
((Cookie != String.Empty) ? "Cookie: " + Cookie + "\r\n" : "") +
((Method.ToUpper() == "POST") ? "Content-Length:" + DataFields.Length + "\r\n" : "") +
"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13\r\n" +
"Connection: Close\r\n" +
"Content-Type: application/x-www-form-urlencoded\r\n" +
"\r\n" +
((Method.ToUpper() == "POST") ? DataFields : "");
Byte[] bytesSent = Encoding.ASCII.GetBytes(request);
Byte[] bytesReceived = new Byte[256];
Socket s = ConnectSocket(host, Port);
if (s == null)
return ("Connection failed");
s.Send(bytesSent, bytesSent.Length, 0);
int bytes = 0;
string page = String.Empty;
do
bytes = s.Receive(bytesReceived, bytesReceived.Length, 0);
page = page + Encoding.GetEncoding("UTF-8").GetString(bytesReceived, 0, bytes);
while (bytes > 0);
return page;
我将在这段代码中添加什么?
【问题讨论】:
使用此代码连接代理时遇到什么错误? 此代码有效.. 代理和袜子不存在工作 【参考方案1】:不太清楚为什么你说你不想使用WebRequest
(或者我想,WebClient
)当你清楚地创建一个http web请求时,但我假设你有你的理由!
简而言之,.Net 中没有支持 SOCKS 代理的内置方式,并且不支持低至套接字级别的 http 代理(因为无法保证,所以低级别没有任何意义请求是http请求)。 .Net 在更高的 HttpWebRequest
/WebClient
层内置了 http 代理支持 - 但你已经打折了。
我认为您的选择是:
为工作使用正确的工具 (HttpWebRequest
或 WebClient
) 并得到
免费提供 http 代理支持。
使用第三方实现的 SOCKS 支持,如果您进行 Google 搜索,其中似乎有一些。 (例如this 一个)。
【讨论】:
【参考方案2】:不要打开到实际位置的套接字,而是尝试打开到代理的套接字。
【讨论】:
以上是关于代理/Socks C# 问题的主要内容,如果未能解决你的问题,请参考以下文章
C# HttpClient tor socks4/5 代理?