ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Не работает функция проверки HTTP прокси серверасервера
  #1  
Старый 04.08.2009, 12:14
Аватар для RumShun
RumShun
Постоянный
Регистрация: 27.10.2008
Сообщений: 380
Провел на форуме:
1249808

Репутация: 149
Отправить сообщение для RumShun с помощью ICQ
Question Не работает функция проверки HTTP прокси серверасервера

вобщем вот код
Код:
  TProxy = record
   adrIA:TInAddr; 
   adr:string[15];
   port:integer;
  end;
function checkHttp(Serv:String;Port:integer;proxy:TProxy):boolean;
var
 sock:TSocket;
 addr:TSockAddrIn;
 Buff: array[0..255] of char;
begin
 result:=false;
 FillChar(Addr.sin_zero, SizeOf(Addr.sin_zero), 0);
 addr.sin_family:=AF_INET;
 addr.sin_port:=htons(proxy.port);
 addr.sin_addr:=proxy.adrIA;
 connect(sock, @addr, SizeOf(addr));
 str:='CONNECT '+serv+':'+inttostr(port)+' HTTP/1.0\r\nUser-Agent: Opera/9.60\r\n';
 send(Sock,str,sizeof(str),0);
 FillChar(Buff,sizeof(Buff), 0);
 recv(sock2,Buff,sizeof(Buff),0);
 if buff[10]='2' then result:=true;
  closesocket(sock2);
end;
максимальное его упростил, пробовал уже и так и эдак, нифига не получаеться подвисает на
recv(sock2,Buff,sizeof(Buff),0);
потом ничего не принимает.
Цитата:
В RFC 2616 (HTTP 1.1) описаны следующие методы: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT.
Пролистав ниже по спецификации, читаем следующее о методе CONNECT: "Спецификация резервирует имя метода CONNECT для использования с прокси, которые могут динамически переключаться на работу в качестве туннеля (например, туннелирование SSL)". Далее идет ссылка на документ (draft-luotonen-web-proxy-tunneling-XX), некоторые выдержки из которого будут приводиться ниже. Этот документ описывает расширение протокола HTTP 1.x (не только 1.1, но и 1.0) для организации туннелирования TCP-based протоколов через веб-прокси. Теперь собственно о том, как это работает.
1. Клиент соединяется с HTTP Proxy, поддерживающим метод CONNECT.
2. Клиент посылает серверу строку вида "CONNECT target_host:target_port HTTP/1.x\r\nUser-Agent: User Agent\r\n"
3. В ответ на эту строку сервер может либо потребовать авторизацию, либо вернуть состояние удачного соединения либо ошибку.
вроде все просто, где чево не понимаю не могу найти.
 
Ответить с цитированием

  #2  
Старый 04.08.2009, 12:45
Аватар для slesh
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

Проверь снифером правильно запрос идет или нет.
Но главное - HTTP хидер должен заканчиваться на 2 CRLF

А теперь самое главное:
str:='CONNECT '+serv+':'+inttostr(port)+' HTTP/1.0\r\nUser-Agent: Opera/9.60\r\n';

\r\n - это сишные и в Delphi такое не прокатит. и как видиш у тебя тока 1 CRLF вконце

По этому перепиши:
str:='CONNECT '+serv+':'+inttostr(port)+' HTTP/1.0'+#13#10+'User-Agent: Opera/9.60'+#13#10#13#10;

СРазу видно что код не рабочий.
str - вообще не объявлено нигде.
если str - string
то лучше send делать так:
send(Sock,@str[1], length(str),0);

А вообще судя по коду - это вообще недолно работать потому как ты даже сокет не создаеш. Выкини код и напиши нормальный, а не передирай из Си.
 
Ответить с цитированием

  #3  
Старый 05.08.2009, 05:09
Аватар для RumShun
RumShun
Постоянный
Регистрация: 27.10.2008
Сообщений: 380
Провел на форуме:
1249808

Репутация: 149
Отправить сообщение для RumShun с помощью ICQ
По умолчанию

Цитата:
СРазу видно что код не рабочий.
str - вообще не объявлено нигде.
рабочий, просто выдран из контекста
Цитата:
А теперь самое главное:
str:='CONNECT '+serv+':'+inttostr(port)+' HTTP/1.0\r\nUser-Agent: Opera/9.60\r\n';

\r\n - это сишные и в Delphi такое не прокатит. и как видиш у тебя тока 1 CRLF вконце

По этому перепиши:
str:='CONNECT '+serv+':'+inttostr(port)+' HTTP/1.0'+#13#10+'User-Agent: Opera/9.60'+#13#10#13#10;
спасибо большое в этом проблема и была, переделал, все работает
Цитата:
если str - string
то лучше send делать так:
send(Sock,@str[1], length(str),0);
выдает ошибку Constant object cannot be passed as var parameter при компиляции (D6)
send(Sock, str, sizeof(str), 0) работает нормально.
 
Ответить с цитированием

  #4  
Старый 05.08.2009, 12:54
Аватар для St0nX
St0nX
Участник форума
Регистрация: 19.05.2007
Сообщений: 281
Провел на форуме:
2823587

Репутация: 106
Отправить сообщение для St0nX с помощью ICQ
По умолчанию

Код:
int FindString(char *str1,char *str2)
{
int nstr1,nstr2,i,j,nstr,sstr;
nstr1=strlen(str1);
nstr2=strlen(str2);
if(nstr1>nstr2)
{
nstr=nstr1-nstr2;
for(i=0;i<nstr;i++)
{
sstr=0;
for(j=0;j<nstr2;j++)
{
if(str1[j+i]==str2[j])
{
sstr++;
}
}
if(sstr==nstr2)
{
return 1;
}
}
}
else
{
return -1;
}
return 0;
}

int CheckProxy(char *proxy, int port)
{
SOCKADDR_IN anAddr;
anAddr.sin_family = AF_INET;
anAddr.sin_addr.S_un.S_addr = inet_addr(proxy);
anAddr.sin_port = htons(port);

SOCKET  Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
int tmo = 3000;
setsockopt(Socket,SOL_SOCKET,SO_RCVTIMEO,(const char*)&tmo,sizeof(tmo));

int i;
char Answer[40];
char HTTPAnswer[] = "HTTP/1.1";
connect(Socket, (struct sockaddr *)&anAddr, sizeof(struct sockaddr));
//SOCKS
char Message2[] = {0x05,0x01,0x00};
send(Socket,Message2,3, 0);
memset(Message2,0,3);
recv(Socket, Message2, 3, 0);
if(Message2[0]==0x05)
{
return 5;
}
else
{
//http
char zSend[] = "GET / HTTP/1.1\r\nUser-Agent: Opera/9.63 (Windows NT 5.1; U; ru) Presto/2.1.1\r\nHost: www.google.com\r\nAccept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\r\nAccept-Language: ru-RU,ru;q=0.9,en;q=0.8\r\nAccept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1\r\nAccept-Encoding: deflate, gzip, x-gzip, identity, *;q=0\r\nCookie: rememberme=true;\r\nPREF=ID=cbb453ccc57c8739:TM=1228397956:LM=1228457555:GM=1:S=PD__kjM08drYVN99;\r\nNID=19=QiJDI3cjj8O4IHJ3M7LO81Clx9avdSixKEHLLgqFw1OtlYjy_Iqt-qOwO1WuTYj6_ZgNzf_eWRndnTWkAQ-N7hfii7nh7skDUtQtpMEsLFOq1MisvpHTzQn9g0FCZXwO;\r\nSID=DQAAAH0AAAAg2B1ks0PiX3lB6cSvZSSgCiGHwjea5TLv7CzWzH5q23MkMc7Ikj0h5pWoM4nrfSIVq-9upxKQd-QWc-NZkZNggOE425YOTsNEks-R3Zfae0k8tEpyLVG-aQI6zq90BlzIYB99XcDSfy\r\nb79S2_-80zTE82Q9PY-7VE5l2SrvTIw\r\nCookie2: $Version=1\r\nConnection: Keep-Alive, TE\r\nTE: deflate, gzip, chunked, identity, trailers\r\n\r\n";
send(Socket,zSend,strlen(zSend), 0);
recv(Socket, Answer, 40, 0);
if(FindString(Answer,HTTPAnswer)==1)
return 3;
}

closesocket(Socket);
return -1;
}
Когда то писал... определяет тип и живая не живая
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
По Www без следов foreva Чужие Статьи 34 11.02.2008 15:54
Proxy FAQ foreva Чужие Статьи 12 04.01.2008 12:15
Живые прокси xdx ICQ 111 15.04.2007 13:10
Прокси: Как вас вычислить если вы под анонимным прокси Geveres Статьи 0 19.11.2005 17:02
Защита Web приложений с помощью Apache и mod_security k00p3r Чужие Статьи 0 12.06.2005 20:51



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ