Winsock + HTTP - работа с доменными именами.
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
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()<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->h_addr_list[0][0];
adr.sin_addr.S_un.S_un_b.s_b2=hp->h_addr_list[0][1];
adr.sin_addr.S_un.S_un_b.s_b3=hp->h_addr_list[0][2];
adr.sin_addr.S_un.S_un_b.s_b4=hp->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)>0)
{
dest=dest+resvbuf; //dest - конечный буфер, куда пишется ответ от сервера
}
delete [] resvbuf;
return 1;
} Проще говоря, мне нужно послать на narod.ru такую строку чтобы он знал, что у него там есть домен третьего уровня, и что файл нужно взять именно оттуда, а не с самого народа. P.S. Сори, что много букв, не мог по другому сформулировать:)
|
|
|
RE: Winsock + HTTP - работа с доменными именами. - 2009-11-20 20:07:35.260000
|
|
|
Zmaster
Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
|
up
|
|
|
RE: Winsock + HTTP - работа с доменными именами. - 2009-11-20 20:31:04.516666
|
|
|
oRb
Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
|
Нужно передавать в заголовке host имя нужного тебе домена.
|
|
|
RE: Winsock + HTTP - работа с доменными именами. - 2009-11-20 21:29:11.273333
|
|
|
Zmaster
Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
|
oRb, ты гений!
|
|
|
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-а?
|
|
|
RE: Winsock + HTTP - работа с доменными именами. - 2009-11-24 21:51:47.830000
|
|
|
Zmaster
Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
|
Чтобы подробнее описать проблему, снял видео. Скачать файл video.rar
|
|
|
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-а? Твой сайт располагается на каком-то из серверов, принадлежащих яндексу, а ты обращаешься к определенному. И как он там сконфигурирован известно только админам яндекса.
|
|
|
RE: Winsock + HTTP - работа с доменными именами. - 2009-11-25 16:13:00.040000
|
|
|
Zmaster
Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
|
Ага, что ты предлагаешь?:)
|
|
|
RE: Winsock + HTTP - работа с доменными именами. - 2009-11-25 18:31:27.296666
|
|
|
oRb
Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
|
Предлагаю резолвить нужный адрес, а не абы что.
|
|
|
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.
|
|
|
RE: Winsock + HTTP - работа с доменными именами. - 2009-11-30 20:08:38.810000
|
|
|
Zmaster
Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
|
up
|
|
|
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]');
SaveHTMLSourceToFile('FILE>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. Заранне сори если не правильно тебя понял =)
|
|
|
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
|
|
|
RE: Winsock + HTTP - работа с доменными именами. - 2009-12-01 18:30:51.506666
|
|
|
Zmaster
Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
|
Блин, oRb, спасибо тебе еще раз, я понял свою ошибку (не сразу дошло, что домен lex9305 может находиться не только на народе)
|
|
|
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
|
|
|
RE: Winsock + HTTP - работа с доменными именами. - 2009-12-21 17:04:03.803333
|
|
|
Zmaster
Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
|
up
|
|
|
RE: Winsock + HTTP - работа с доменными именами. - 2009-12-22 22:24:09.956666
|
|
|
Zmaster
Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
|
Поднимаю выше крыши, проблема не решена
|
|
|
RE: Winsock + HTTP - работа с доменными именами. - 2009-12-23 12:11:03.506666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Снифферами пробовал смотреть, как браузеры забирают?
|
|
|
RE: Winsock + HTTP - работа с доменными именами. - 2009-12-23 12:21:59.383333
|
|
|
Zmaster
Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
|
Нет не пробовал. Спасибо за идею, испробую.
|
|
|
RE: Winsock + HTTP - работа с доменными именами. - 2009-12-25 14:32:59.643333
|
|
|
Zmaster
Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
|
Все бы ничего, но ни один онлайн сниффер из испробованных не показывает то, что посылает браузер серверу так как есть. В основном только IP и откуда пришли.
|
|
|
RE: Winsock + HTTP - работа с доменными именами. - 2009-12-28 16:30:07.310000
|
|
|
Dark.Lord
Сообщений: 141
Оценки: 0
Присоединился: 2009-02-28 17:24:27.466666
|
LiveHTTPHeaders юзай для фф. Только сжатие не используй(gzip и т.д.). Да и вообще должны быть готовые классы для работы с http.
|
|
|
|
|