Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Определить является ли адрес прокси сервером


Автор: Gnusss 30.10.2007, 14:04
Привет всем.

Столкнулся с такой проблемой, есть некий адрес и порт (например 192.168.3.5:3125) нужно определить является ли этот адрес socks прокси сервером. 
Раньше с прокси вообще не работал, поэтому нет никаких предположений как это вообще можно реализовать, поиск, к сожалению тоже никаких результатов не дал.

Заранее благодарю за ответ.

Автор: dmitry501 8.11.2007, 09:18
Соединяешься с сервером и шлешь ему сообщение из протокола начала соединения Socks
Например 05 01 01 
И ждешь ответ.
Прокси посылает ответ, если все корректно 05 00
Вот пример на спецязыке WP
Код

 p_ip:=inet_addr('10.0.0.13'); // proxy IP
 p_port:=htons(1080); // proxy Port
 pck:=HStr('05 01 00'); // пакет авторизации socks5
 Server:=gWSA.TCPsocket(block); // создаём блокирующий сокет
 i:= gWSA.connect(Server,p_ip,p_port); // открываем соединение с proxy
 if i=-1 then exit;
 Writelog('proxy connect');
 gWSA.send(Server,pck); // отправляем пакет
  buf:= FStr(256,#0);
  i:= gWSA.recv(Server, buf);
  if i<=0 then exit;
  if buf[1] <> #5 then exit;
  if buf[2] <> #0 then exit;
  pck:=HStr('05 01 00 01')+IntToBin(ip,4)+IntToBin(htons(port),2); // пакет socks5 запроса
  gWSA.send(Server,pck); // отправляем пакет
  i:= gWSA.recv(Server, buf);
  if i<=0 then exit;
  if buf[1] <> #5 then exit;
  if buf[2] <> #0 then exit;
  ip := GInt(buf,5,4);
  port := htons(GInt(buf,9,2)); // байты порта 'перевернуты'

В итоге получим IP и порт , через который и будем общатся с целевым сервером

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)