Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Winsock + HTTP - работа с доменными именами.

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Winsock + HTTP - работа с доменными именами.
Имя
Сообщение << Старые топики   Новые топики >>
Winsock + HTTP - работа с доменными именами. - 2009-11-19 18:29:10.973333   
Zmaster

Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
Здравствуйте. Такая проблема:
Есть адрес, www.zmaster.narod.ru к примеру. Мне нужно получить файл, хранящийся по адресу www.zmaster.narod.ru/file.txt.
Т. е. первой что приходит в голову - это законнектится к серверу функцией connect. Короче, я сразу создал свою функцию Connect на основе этой:

bool Connect(SOCKET &soket, string host, bool flag) { sockaddr_in adr; hostent *hp; if(host.length()&lt;7) return 0; if(flag==0) { hp=gethostbyname(host.c_str()); if(hp==NULL) return 0; adr.sin_addr.S_un.S_un_b.s_b1=hp-&gt;h_addr_list[0][0]; adr.sin_addr.S_un.S_un_b.s_b2=hp-&gt;h_addr_list[0][1]; adr.sin_addr.S_un.S_un_b.s_b3=hp-&gt;h_addr_list[0][2]; adr.sin_addr.S_un.S_un_b.s_b4=hp-&gt;h_addr_list[0][3]; } else { adr.sin_addr.S_un.S_addr=inet_addr(host.c_str()); } adr.sin_family=AF_INET; adr.sin_port=htons(80); soket=socket(AF_INET, SOCK_STREAM, 0); if(soket==INVALID_SOCKET) return 0; if(connect(soket, (sockaddr*) &adr, sizeof(adr))!=0) return 0; return 1; }
Как видим, она сначала определяет тип адреса (если flag==0 тогда доменное имя иначе IP). Потом переводит его в вид, понятный струкруре sockaddr_in, порт берется 80(HTTP). После идет подключение. Я уже говорил, что хочу забрать файл с www.zmaster.narod.ru. Значит я подключаюсь по этому адресу и получаю файл моей функцией. Но проблема в том, что каким бы не было имя домена третьего уровня, IP всегда один и тот же (IP narod-а). Что мне надо сделать чтобы у меня забирался файл не с www.narod.ru/file.txt, а с моего адреса. Кстати, файл забираю, следующей функцией:

bool GetDataFromServer(SOCKET &soket, string what, string &dest) // получить данные с сервера { char *resvbuf=new char[1024]; //буфер string GetStr; //строка отправки ZeroMemory(resvbuf, 1024); GetStr="GET "+what+" HTTP/1.0\r\n\r\n"; //строка посылки на сервер send(soket, GetStr.c_str(), GetStr.length(), 0); //отправляем while(recv(soket, resvbuf, 1024,0)&gt;0) { dest=dest+resvbuf; //dest - конечный буфер, куда пишется ответ от сервера } delete [] resvbuf; return 1; }
Проще говоря, мне нужно послать на narod.ru такую строку чтобы он знал, что у него там есть домен третьего уровня, и что файл нужно взять именно оттуда, а не с самого народа.

P.S. Сори, что много букв, не мог по другому сформулировать:)
Post #: 1
RE: Winsock + HTTP - работа с доменными именами. - 2009-11-20 20:07:35.260000   
Zmaster

Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
up
Post #: 2
RE: Winsock + HTTP - работа с доменными именами. - 2009-11-20 20:31:04.516666   
oRb

Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
Нужно передавать в заголовке host имя нужного тебе домена.
Post #: 3
RE: Winsock + HTTP - работа с доменными именами. - 2009-11-20 21:29:11.273333   
Zmaster

Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
oRb, ты гений!
Post #: 4
RE: Winsock + HTTP - работа с доменными именами. - 2009-11-23 22:31:57.410000   
Zmaster

Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
Так, теперь возникла другая проблема. Я отправляю на сервер яндекса, например, строку:

GET /file.txt HTTP/1.0
Host: zmaster.narod.ru

Он ошибки не возвращает, а возвращает код перенаправления. Типа этот документ был перенесен "сюда" и написана ссылка narod.yandex.ru/file.txt. Но я проверил, там ее нет. Почему это происходит? Может что-то еще нужно отослать серверу? Может это что-то типа фильтрации или защиты от DDoS-а?
Post #: 5
RE: Winsock + HTTP - работа с доменными именами. - 2009-11-24 21:51:47.830000   
Zmaster

Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
Чтобы подробнее описать проблему, снял видео.

Скачать файл video.rar
Post #: 6
RE: Winsock + HTTP - работа с доменными именами. - 2009-11-24 22:09:21.330000   
oRb

Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000

quote:

ORIGINAL: Zmaster

Так, теперь возникла другая проблема. Я отправляю на сервер яндекса, например, строку:

GET /file.txt HTTP/1.0
Host: zmaster.narod.ru

Он ошибки не возвращает, а возвращает код перенаправления. Типа этот документ был перенесен "сюда" и написана ссылка narod.yandex.ru/file.txt. Но я проверил, там ее нет. Почему это происходит? Может что-то еще нужно отослать серверу? Может это что-то типа фильтрации или защиты от DDoS-а?

Твой сайт располагается на каком-то из серверов, принадлежащих яндексу, а ты обращаешься к определенному. И как он там сконфигурирован известно только админам яндекса.
Post #: 7
RE: Winsock + HTTP - работа с доменными именами. - 2009-11-25 16:13:00.040000   
Zmaster

Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
Ага, что ты предлагаешь?:)
Post #: 8
RE: Winsock + HTTP - работа с доменными именами. - 2009-11-25 18:31:27.296666   
oRb

Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
Предлагаю резолвить нужный адрес, а не абы что.
Post #: 9
RE: Winsock + HTTP - работа с доменными именами. - 2009-11-27 19:38:12.830000   
Zmaster

Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
Как-то процесс не идет. Пробовал подключаться к разным серверам и брать файл. Файл находит, но пишет, что он был перемещен в место X. Но там естественно ничего нету. oRb, пожалуйста, может посмотришь в свободное время? Попробуй через telnet забрать файл lex9305.narod.ru/mysteam.txt.
Post #: 10
RE: Winsock + HTTP - работа с доменными именами. - 2009-11-30 20:08:38.810000   
Zmaster

Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
up
Post #: 11
RE: Winsock + HTTP - работа с доменными именами. - 2009-11-30 20:46:41.986666   
LORd of

Сообщений: 269
Оценки: 0
Присоединился: 2008-11-02 22:03:33.280000
Стоп, а зачем такой гемор? делал что то подобное НО делал совершенно не так ща Я так понимаю есть доступ к странице и просто стянуть оттуда исходник html Страницы?

Итак примитивно открываеш стр в
TWebBrowser
Затем используя ниже приведенную фуекцию сохраняеш текст файла в виде HTML

WebBrowser1.Navigate('[b]zmaster.narod.ru/file.txt[/b]'); &nbsp; SaveHTMLSourceToFile('FILE&gt;TXT', WebBrowser1);

procedure TForm1.SaveHTMLSourceToFile(const FileName: string; WB: TWebBrowser); var PersistStream: IPersistStreamInit; FileStream: TFileStream; Stream: IStream; SaveResult: HRESULT; begin PersistStream := WB.Document as IPersistStreamInit; FileStream := TFileStream.Create(FileName, fmCreate); try Stream := TStreamAdapter.Create(FileStream, soReference) as IStream; SaveResult := PersistStream.Save(Stream, True); if FAILED(SaveResult) then MessageBox(Handle, 'Fail to save HTML source', 'Error', 0); finally FileStream.Free; end; end;
P.S. Заранне сори если не правильно тебя понял =)
Post #: 12
RE: Winsock + HTTP - работа с доменными именами. - 2009-11-30 21:52:53.313333   
oRb

Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000

quote:

ORIGINAL: Zmaster

Как-то процесс не идет. Пробовал подключаться к разным серверам и брать файл. Файл находит, но пишет, что он был перемещен в место X. Но там естественно ничего нету. oRb, пожалуйста, может посмотришь в свободное время? Попробуй через telnet забрать файл lex9305.narod.ru/mysteam.txt.
Зачем к разным? Надо к 1, но нужному. Научно-популярно:
~ $ host lex9305.narod.ru lex9305.narod.ru has address 213.180.199.48 ~ $ nc 213.180.199.48 80 GET /mysteam.txt HTTP/1.1 Host: lex9305.narod.ru Connection: close HTTP/1.1 200 OK Date: Mon, 30 Nov 2009 18:51:31 GMT Server: ZX_Spectrum/1997 (Sinclair_BASIC) Set-Cookie: nuid=1360803391259607096; path=/; expires=Thu, 28-Nov-19 18:51:31 GMT; domain=.narod.ru Last-Modified: Fri, 20 Nov 2009 20:32:24 GMT ETag: "1b56975-10-4b06fcd8" Accept-Ranges: bytes Content-Length: 16 Connection: close Content-Type: text/plain; charset=windows-1251 tabvjd 1q2w3e4r
Post #: 13
RE: Winsock + HTTP - работа с доменными именами. - 2009-12-01 18:30:51.506666   
Zmaster

Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
Блин, oRb, спасибо тебе еще раз, я понял свою ошибку (не сразу дошло, что домен lex9305 может находиться не только на народе)
Post #: 14
RE: Winsock + HTTP - работа с доменными именами. - 2009-12-20 16:19:44.880000   
Zmaster

Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
Мой сумасшедший топик вернулся:)
Похожая проблема с ucoz.ru. Хочу забрать файл http://www.p1bedr1.ucoz.ru/data.dat . Ошибка 403 - Forbidden.
Ребят, попробуйте через телнет достать этот файл. Кстати, скажите каким клиентом пользуетесь. А то в Виндовском много неудобностей. Может где и ошибаюсь. Ввожу такой текст:

GET /data.dat HTTP/1.0
host: www.p1bedr1.ucoz.ru
Post #: 15
RE: Winsock + HTTP - работа с доменными именами. - 2009-12-21 17:04:03.803333   
Zmaster

Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
up
Post #: 16
RE: Winsock + HTTP - работа с доменными именами. - 2009-12-22 22:24:09.956666   
Zmaster

Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
Поднимаю выше крыши, проблема не решена
Post #: 17
RE: Winsock + HTTP - работа с доменными именами. - 2009-12-23 12:11:03.506666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Снифферами пробовал смотреть, как браузеры забирают?
Post #: 18
RE: Winsock + HTTP - работа с доменными именами. - 2009-12-23 12:21:59.383333   
Zmaster

Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
Нет не пробовал. Спасибо за идею, испробую.
Post #: 19
RE: Winsock + HTTP - работа с доменными именами. - 2009-12-25 14:32:59.643333   
Zmaster

Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
Все бы ничего, но ни один онлайн сниффер из испробованных не показывает то, что посылает браузер серверу так как есть. В основном только IP и откуда пришли.
Post #: 20
RE: Winsock + HTTP - работа с доменными именами. - 2009-12-28 16:30:07.310000   
Dark.Lord

Сообщений: 141
Оценки: 0
Присоединился: 2009-02-28 17:24:27.466666
LiveHTTPHeaders юзай для фф. Только сжатие не используй(gzip и т.д.).
Да и вообще должны быть готовые классы для работы с http.
Post #: 21
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Winsock + HTTP - работа с доменными именами.







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.