How I can add proxy/socks4/socks5 to C# Socket.
I need use it throw Socket.
I don’t want use WebRequest and any classes.
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;
}
What will I add to this code?
Not quite sure why you say you don’t want to use
WebRequest(or I imagine,WebClientfor that matter) when you are clearly creating an http web request, but I’ll assume you have your reasons!In short, there is no built in way of supporting SOCKS proxies in .Net, and there is not support for http proxies at the level as low as sockets (it wouldn’t really make sense this low as there is no guarantee the requests are http requests). There is http proxy support built into .Net at the higher
HttpWebRequest/WebClientlayer – but you’ve already discounted this.I think your options are:
(
HttpWebRequestorWebClient) and gethttp proxy support for free.