Модераторы: Snowy, Poseidon, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Winsock и Proxy 
V
    Опции темы
ScoL
Дата 3.4.2008, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 16.4.2007

Репутация: нет
Всего: нет



Ув. Форумчане кто может подсказать как приконнектиться к прокси и через него послать какие либо данные ? (поиск юзал, ничего подходящего не нашел)
PM MAIL   Вверх
Snowy
Дата 4.4.2008, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Присоедениться к прокси - так-же, как и к любому другому серверу.
А, непосредственно, отправка данных через него зависит от типа прокси и протокола.
PM MAIL   Вверх
ScoL
Дата 4.4.2008, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 16.4.2007

Репутация: нет
Всего: нет



просто через connect ? прокси http.... если можно то примерчик как послать данные через http прокси.... smile  или ссылку на материал по данной теме )
PM MAIL   Вверх
Virtuals
Дата 7.4.2008, 07:18 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 476
Регистрация: 27.11.2006

Репутация: 2
Всего: 11



работа через прокси отличается от обычного HTTP (и не только), все го лиш одной доп. коммандой.

исходная:
прокси proxy
порт 8080

если для прямого соединения вы подключаетесь к forum.vingrad.ru и порту 80
и шлете
Код

get forum.vingrad.ru


то с прокси
вы подключаетесь к proxy и порту 8080
шлете 

Код

connect http://forum.vingrad.ru:80


получаете типа

Код

HTTP/1.0 200 Connection established
Pragma: no-cach
Content-Type: text/html; charset=windows-1251


(сдесь главное HTTP/1.0 200 )
а далее как обычно

Код

get forum.vingrad.ru

PM MAIL ICQ   Вверх
ScoL
Дата 7.4.2008, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 16.4.2007

Репутация: нет
Всего: нет



Virtuals, спс разобрался  smile 
PM MAIL   Вверх
HiVeR
Дата 1.4.2009, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 30.6.2008

Репутация: нет
Всего: нет



собсно не получается...
постоянно летят Error'ы на recv'е непонятно почему и зачем.. очень редко было всё ок, и на выходе от прокси получал страницу с "400, Bad Request".. но это было всего пару раз..
перепроверил кучу проксей, многие из них 100% рабочие, а мой код их не хочет брать(. думаю изза неправильного запроса.. или неправильного принятия данных, хотя вроде всё верно.
вот основная часть кода, выделил самые сомнительные места, hpack - перепробовал кучу самых разных вариантов - и с #13#10#13#10 и без них, совсем по разному писал url - и с http:// и без, и ещё пару вариантов - с http:// ваще ни в какую не шло, а просто если домен - то вроде что-то отправлялось.. кароч жесть путаница), подскажите плз что тут нетак:
Код

procedure ProxyConnect(ProxyIP:string;ProxyPort:word;Url:string);
var Sock:TSocket; 
    SockAddr:TSockAddr;
    hpack, hresult:string; //hpack - отправляемый пакет, hresult - ответ
    res:integer;
    buf:array[0..1023]of char;
begin
Sock:=Socket(AF_INET, SOCK_STREAM, 0);
if Sock=INVALID_SOCKET
 then
   begin
   MessageBox(0,'Invalid Socket','Error',0);
   exit;
   end;

SockAddr.sin_family:=AF_INET;
SockAddr.sin_port:=htons(ProxyPort);
SockAddr.sin_addr.S_addr:=Inet_Addr(ProxyIP);

if Connect(Sock, SockAddr, sizeof(SockAddr))=Socket_Error
 then
   begin
   MessageBox(0,'Timeout proxy','Error',0);
   CloseSocket(Sock);
   exit;
   end;

hpack:='connect '+URL+':80'+' HTTP/1.1'+#13#10#13#10;

if send(Sock, hpack[1], Length(hpack), 0)=Socket_error //отправляем пакет
 then
   begin
   MessageBox(0,'Send Error','Error',0);
   CloseSocket(Sock);
   exit;
   end;

Repeat //принимаем
  Res := recv(Sock, Buf, SizeOf(Buf), 0);
  if Res = SOCKET_ERROR
   then
     begin
     MessageBox(0,'Recv Error','Error',0);
     CloseSocket(Sock);
     exit;
     end
   else
     if Res > 0
      then
        begin
        hresult := hresult + Copy(Buf,0, Res);
        end;
until Res<=0;

if (pos('HTTP/1.0 200', hresult)<>0)
 or (pos('HTTP/1.1 200', hresult)<>0)
  then MessageBox(0,'OK','!',0) // OK
  else MessageBox(0,'Ne ok...','!',0); // Proxy Error
MessageBox(0, pchar(hresult),'Result',0);
CloseSocket(Sock);
end;

в основном пробовал коннектиться к yoip.ru - через проксю в браузере норм коннектилось, а тут Recv Error или пустой результат после долгого ожидания, или просто невозвратное зависание.
PM MAIL   Вверх
Matematik
Дата 1.4.2009, 16:17 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 24
Всего: 50



Возьми сниффер, забей в браузер проксю и посмотри что и как посылает.
Потом попробуй своей программой и сравни.
PM MAIL WWW ICQ   Вверх
HiVeR
Дата 1.4.2009, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 30.6.2008

Репутация: нет
Всего: нет



Matematik, спс за совет, так очевидно - а попробовать ранее чёто в голову не пришло).
впринципе обошлось и без этого), просто всё проще:
Код

hpack:=
  'GET http://yoip.ru:80/ HTTP/1.1'+#13#10+
  'Host:yoip.ru'+#13#10+
  'User-Agent:Mozilla/3.0 (compatible; Indy Library)'+#13#10#13#10;

вот такого вида запрос у индейцев,  работает smile . Только не очень хорошо, что сразу читается вся страница, лучше бы просто коннект. браузер у меня проснифать не получилось - хттп сниф не ловит самый первый запрос(если он есть), а через сниффер, который всё ловит (IP Sniffer 1.98) - наловил кучу запросов между проксей и моим компом - и в основном там каракули.. мож неправильно проснифал... 
способ, описанный Virtuals в 4ом посте, тоже вроде работает, но наверно чего-то не хватает..

Это сообщение отредактировал(а) HiVeR - 1.4.2009, 17:19
PM MAIL   Вверх
KeeRush
Дата 7.4.2009, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 16.5.2006
Где: г Магнитогорск

Репутация: нет
Всего: нет



Доброго времени суток.
А как быть в том случае если протокол отличен от HTTP?
Ситуация: сервер получает данные с приборов по TCP. Для этого создаю слушающий сокет и когда приходит пакет от прибора то уже устанавливаю соединение с ним по новому сокету. А что делать если нужно работать через прокси?

Это сообщение отредактировал(а) KeeRush - 7.4.2009, 21:12
PM MAIL   Вверх
Virtuals
Дата 8.4.2009, 05:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 476
Регистрация: 27.11.2006

Репутация: 2
Всего: 11



KeeRush слушать через прокси никак, а вот устанавливать соединение влегкую.
Код

connect ипприбора:портприбора

главное чтоб твой прокси несопротивлялся. smile
ЗЫ я так с почтой работаю по POP3 $)
PM MAIL ICQ   Вверх
KeeRush
Дата 8.4.2009, 05:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 16.5.2006
Где: г Магнитогорск

Репутация: нет
Всего: нет



Virtuals, В том то и проблема что соединение инициируют приборы. Сервер лишь создает слушающий сокет и ждет.

PM MAIL   Вверх
Virtuals
Дата 8.4.2009, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 476
Регистрация: 27.11.2006

Репутация: 2
Всего: 11



KeeRushтогда увы...
слушающий сокет должен быть в одное сети с прибором, без никаких проксей.
озвуч задачу подробней... 
приложение сам пишеш?
где приборы и где нужно инфу получать?

PM MAIL ICQ   Вверх
KeeRush
Дата 8.4.2009, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 16.5.2006
Где: г Магнитогорск

Репутация: нет
Всего: нет



Да приложение пишу сам. Сервер оформлен в виде сервиса WinNT. Приборы выходят в инет по GPRS и стучат на определенный ИП по определенному порту. Сервер соответственно обменивается с приборами информацией по внутреннему протоколу и обрабатывает ее. Заказчик выдвигает требование чтобы система работала за прокси. FreeCap и иже с ними не приветствуются. Как то так smile 
PM MAIL   Вверх
Virtuals
Дата 8.4.2009, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 476
Регистрация: 27.11.2006

Репутация: 2
Всего: 11



KeeRush, в любом соединении сетевом. ХОТЯБЫ 1 из двоих обязан иметь белый IP. или если за NATом то проброс портов. 
другого не дано!!!
так что может не прокси а всетаки нат или фаер перед сервером.?
PM MAIL ICQ   Вверх
KeeRush
Дата 8.4.2009, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 16.5.2006
Где: г Магнитогорск

Репутация: нет
Всего: нет



Virtuals, Немного не понимаю при чем тут фаер. Думаю возникло некоторое непонимание smile
На данный момент система работает. Сервер имеет "белый" ИП. Приборы при выходе на связь получают свои динамические "белые" ипы (насколко я знаю ни один из GSM операторов не предоставляет статические ИПы). Но другой заказчик находится на территории режимного объекта и выход в инет имеет только через прокси сервер доступа к администрированию которого нет никакого. Таким образом НАТ не проходит. Я так понял что задача классическими методами не решаема.
Но все равно спасибо за помощь! smile


Это сообщение отредактировал(а) KeeRush - 8.4.2009, 15:21
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0880 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.