На делфи я писал для этого модуль, при чём строк там было не мало
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Видел в инете где то класс для этого, но там строк тоже немало, не знаю сможешь ты его к нему прикрутить или нет... Вобщем в НЕТ сокеты через прокси работают через седалищное место.
А я как-раз все типы и писал, при чём хттп прокси учил с попом работать Дада, я понтуюсь
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
public sealed class Proxy
{
public IPAddress ProxyIP { get; set; }
public ushort ProxyPort { get; set; }
public Proxy(string proxyIp, ushort proxyPort)
{
this.ProxyIP = IPAddress.Parse(proxyIp);
this.ProxyPort = proxyPort;
}
public Socket GetConnection(string destIp, ushort desPort)
{
var client = new TcpClient();
client.Connect(ProxyIP, ProxyPort);
SendCommand(client.GetStream(), 0x01, destIp, desPort);
return client.Client;
}
private void SendCommand(NetworkStream proxy, byte command, string destinationHost, ushort destinationPort)
{
byte[] destIp = IPAddress.Parse(destinationHost).GetAddressBytes();
byte[] destPort = BitConverter.GetBytes(destinationPort).Reverse().ToArray();
byte[] userIdBytes = { };
byte[] request = new byte[9 + userIdBytes.Length];
request[0] = 0x04;
request[1] = command;
destPort.CopyTo(request, 2);
destIp.CopyTo(request, 4);
userIdBytes.CopyTo(request, 8);
request[8 + userIdBytes.Length] = 0x00;
proxy.Write(request, 0, request.Length);
Wait(proxy, 10000);
byte[] response = new byte[8];
proxy.Read(response, 0, 8);
if (response[1] != 0x5A)
throw new Exception("Connection error");
}
private void Wait(NetworkStream stream, int timeout)
{
int sleepTime = 0;
while (!stream.DataAvailable)
{
Thread.Sleep(50);
sleepTime += 50;
if (sleepTime > timeout)
throw new TimeoutException();
}
}
}
Юзать соответственно так
Код:
Proxy proxy = new Proxy("58.211.138.27", 1080); //ip и порт прокси
Socket sock = proxy.GetConnection("195.211.131.72", 80); //к чему конектимся
//дальше юзаем сокет по назначению
, если нужен SOCKS5 то википедия вам в руки, протокол там описан во всех деталях
ЗЫ Исключения офк не обрабатывал, берите что дают :nate:
public sealed class Proxy
{
public IPAddress ProxyIP { get; set; }
public ushort ProxyPort { get; set; }
public Proxy(string proxyIp, ushort proxyPort)
{
this.ProxyIP = IPAddress.Parse(proxyIp);
this.ProxyPort = proxyPort;
}
public Socket GetConnection(string destIp, ushort desPort)
{
var client = new TcpClient();
client.Connect(ProxyIP, ProxyPort);
SendCommand(client.GetStream(), 0x01, destIp, desPort);
return client.Client;
}
private void SendCommand(NetworkStream proxy, byte command, string destinationHost, ushort destinationPort)
{
byte[] destIp = IPAddress.Parse(destinationHost).GetAddressBytes();
byte[] destPort = BitConverter.GetBytes(destinationPort).Reverse().ToArray();
byte[] userIdBytes = { };
byte[] request = new byte[9 + userIdBytes.Length];
request[0] = 0x04;
request[1] = command;
destPort.CopyTo(request, 2);
destIp.CopyTo(request, 4);
userIdBytes.CopyTo(request, 8);
request[8 + userIdBytes.Length] = 0x00;
proxy.Write(request, 0, request.Length);
Wait(proxy, 10000);
byte[] response = new byte[8];
proxy.Read(response, 0, 8);
if (response[1] != 0x5A)
throw new Exception("Connection error");
}
private void Wait(NetworkStream stream, int timeout)
{
int sleepTime = 0;
while (!stream.DataAvailable)
{
Thread.Sleep(50);
sleepTime += 50;
if (sleepTime > timeout)
throw new TimeoutException();
}
}
}
Юзать соответственно так
Код:
Proxy proxy = new Proxy("58.211.138.27", 1080); //ip и порт прокси
Socket sock = proxy.GetConnection("195.211.131.72", 80); //к чему конектимся
//дальше юзаем сокет по назначению
, если нужен SOCKS5 то википедия вам в руки, протокол там описан во всех деталях
ЗЫ Исключения офк не обрабатывал, берите что дают :nate:
Спасибо большое)
Еще вопрос,ошибки на BitConverter.GetBytes(destinationPort).Reverse().T oArray();
Ни одна из перегрузок метода "Reverse" не принимает "0" аргументов
Гуглил решения не нашёл(