Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.09.28;
Скачать: CL | DM;

Вниз

Нет отличия INADDR_NONE от INADDR_BROADCAST ;(   Найти похожие ветки 

 
Anatoly Podgoretsky ©   (2008-08-07 16:58) [40]

> ketmar  (07.08.2008 16:38:35)  [35]

Не криво, если сеть 192.168.0.0/24 то глупо, если 192.168.0.0/16 то это реальный адрес, а не адрес броадкаста, тоже адрес сети. Все зависит от маски.


 
Сергей М. ©   (2008-08-07 16:58) [41]


> тут до inet_addr нужна предобработка


А она по-любому нужна..

Автор же утверждает, что ему заранее неизвестна нотация параметра.
На вход же inet_addr требуется подача полной или частичной Беркли-нотации


 
Anatoly Podgoretsky ©   (2008-08-07 17:01) [42]

> Сергей М.  (07.08.2008 16:44:37)  [37]

А еще есть кульхачкеры, которые могут указать как -1 или как 4294967295 или как #FFFFFFFF и так далее, но количество вариантов все равно маленькое.


 
Anatoly Podgoretsky ©   (2008-08-07 17:03) [43]

> Сергей М.  (07.08.2008 16:58:41)  [41]

Я обсуждаю предобработку только для одного адреса и пока в формате "255.255.255.255"
результатом преобразования будет правильный адрес, но данный адрес исключен из обработки в функции, он совпадает с кодом ошибки, это плата за чистую переменную!


 
Сергей М. ©   (2008-08-07 17:03) [44]


> Anatoly Podgoretsky ©   (07.08.08 17:01) [42]


А могут еще в CIDR-нотации учудить)


 
Сергей М. ©   (2008-08-07 17:04) [45]


> Anatoly Podgoretsky ©   (07.08.08 17:03) [43]


> обсуждаю предобработку только для одного адреса и пока в
> формате "255.255.255.255"


Ну это понятно.


 
Dmitry S ©   (2008-08-07 17:08) [46]

> [0]
Ты чтото не правильно готовишь. У меня возвращает все как надо:

program Project2;

{$APPTYPE CONSOLE}
uses SysUtils, WinSock;
var
 p: PHostEnt;
 pp: PPChar;
 Data: WSAData;
 I: Integer;
begin
 WSAStartup(2, Data);

 P := gethostbyname("255.255.255.255");
 with P^ do
 begin
   {h_name}
   Writeln("h_name: ", h_name);

   {h_aliases}
   pp := PPChar(h_aliases);
   while pp^ <> nil do
   begin
     Writeln("h_aliases: ", pp^);
     Inc(pp);
   end;

   {h_addrtype}
   Writeln("h_addrtype: ", h_addrtype);

   {h_length}
   Writeln("h_length: ", h_length);

   {h_addr_list}
   pp := PPChar(h_addr_list);
   I := 0;
   while I < h_length do
   begin
     Writeln("h_addr_list: ", Format("%d.%d.%d.%d", [ord(pp^[0]), ord(pp^[1]), ord(pp^[2]), ord(pp^[3])]));
     Inc(pp);
     Inc(I, 4);
   end;
 end;
 Readln;
end.


Вывод:
h_name: 255.255.255.255
h_addrtype: 2
h_length: 4
h_addr_list: 255.255.255.255


 
Dmitry S ©   (2008-08-07 17:12) [47]

У меня подозрение, что автор неправильно использует поле PHostEnt.h_addr_list.

К примеру, если допустить одну оплошность в использовании этого поля я получаю результат: h_addr_list: 100.183.59.0, что очень похоже на результат автора :)


 
Пробежал...   (2008-08-07 17:14) [48]


> не занимайся неясно чем, проверяй 255.255.255.255 руками

ты имеешь в виду: inet_addr -> проверка на 255.255.255.255 -> вызов gethostbyname?

А если вот так: inet_addr ->  вызов gethostbyname -> проверка на 255.255.255.255 - но у меня алгоритм так не сработает. Как написано в [33] какого-то хрена gethostbyname над 255.255.255.255 выдает не -1, а какой-то реальный IP-адрес, каждый раз разный! Картинку приложил... бред какой-то...


> На вход же inet_addr требуется подача полной или частичной
> Беркли-нотации

а ты уверен, что возможна одна единственная возможность - 255.255.255.255? Я вот в этом не уверен... А может сработает 0xFF.0xFF.0xFF.0xFF ?

Или может пробелы допускаются: "255 . 255 . 255 . 255" - может это тоже корректно. Это невозможно? Ну ты это знаешь, я этого не знаю. В большинстве случаев да, будет работать, но я люблю писать универсально...

И еще очень меня смущает, что gethostbyname над "255.255.255.255" возвращает какой-то IP-адрес... Откуда?


 
Dmitry S ©   (2008-08-07 17:14) [49]

хотя я тоже.
Правильнее так:

   {h_addr_list}
   pp := PPChar(h_addr_list);
   while pp^ <> nil do
   begin
     Writeln("h_addr_list: ", Format("%d.%d.%d.%d", [ord(pp^[0]), ord(pp^[1]), ord(pp^[2]), ord(pp^[3])]));
     Inc(pp);
   end;


 
Dmitry S ©   (2008-08-07 17:15) [50]


> И еще очень меня смущает, что gethostbyname над "255.255.
> 255.255" возвращает какой-то IP-адрес... Откуда?

Давай код


 
Сергей М. ©   (2008-08-07 17:15) [51]


> если допустить одну оплошность в использовании этого поля


А запросто, кстати)

тут надо с чувством, с толком, с расстановкой, а у автора все на бегу происходит)


 
Dmitry S ©   (2008-08-07 17:19) [52]

Автор исправь
PInAddr(HostEn^.h_addr_list)^
на
PInAddr(HostEn^.h_addr_list^)^


 
Пробежал...   (2008-08-07 17:22) [53]

Да, забыл один раз разыименовать в коде... Поэтому такой косяк с GetHostByname... Разобрался.

Осталось только распознать, что inet_addr возвращает адрес броадкаста, а не ошибку ;( Зачем же так сделано то галимо...


 
Сергей М. ©   (2008-08-07 17:28) [54]


> Осталось только распознать, что inet_addr возвращает адрес
> броадкаста, а не ошибку


Вот ты, братец-кролик, упертый)

ну чем тебе этот "костыль" мешает - проверить, не представлен ли параметром именно этот адрес, дабы обойти при этой ситуации вызов inet_addr и конвертнуть его тремя строчками своего кода ?


 
Rouse_ ©   (2008-08-07 17:29) [55]


> Осталось только распознать, что inet_addr возвращает адрес
> броадкаста, а не ошибку

А тут все оч просто, если inet_addr не скушал переданный адрес, то отдай его в gethostbyname, если это броадкаст - ты и получишь броадкастовый в результате, а если это вообще что-то левое, то получишь ошибку.


 
Dmitry S ©   (2008-08-07 17:34) [56]

А не проще использовать сразу gethostbyname и не парить мозг никому?


 
ketmar ©   (2008-08-07 17:35) [57]

>[36] Dmitry S © (2008-08-07 16:43:00)
>А что кривого-то?

>[40] Anatoly Podgoretsky © (2008-08-07 16:58:00)
ну, как-то некультурно сидеть на *.255. негласно принято, что туда вешают всякие сервисы.

---
All Your Base Are Belong to Us


 
Dmitry S ©   (2008-08-07 17:37) [58]


> ketmar ©   (07.08.08 17:35) [57]

Предрассудки. Да и сервисы обычно вешают на .254 или .1-.10 :)


 
ketmar ©   (2008-08-07 17:41) [59]

>[58] Dmitry S © (2008-08-07 17:37:00)
не спорю, стандарта на это нет. но как-то не принято, и всё тут. %-)

---
Understanding is not required. Only obedience.


 
Пробежал...   (2008-08-07 18:07) [60]


> А тут все оч просто, если inet_addr не скушал переданный
> адрес, то отдай его в gethostbyname, если это броадкаст
> - ты и получишь броадкастовый в результате, а если это вообще
> что-то левое, то получишь ошибку

хм... ступил что-то ;)
Просто у меня GetHostByName не работал... А тут действительно, чего париться ;)


 
Anatoly Podgoretsky ©   (2008-08-07 20:21) [61]

> Пробежал...  (07.08.2008 17:22:53)  [53]

Затем, что иначе нужен dWord на единицу больший чем FFFFFFFF,


 
Anatoly Podgoretsky ©   (2008-08-07 20:22) [62]

> ketmar  (07.08.2008 17:35:57)  [57]

Туда вешают админов.


 
ketmar ©   (2008-08-07 20:54) [63]

>[62] Anatoly Podgoretsky © (2008-08-07 20:22:00)
всех не перевешаете!

---
Understanding is not required. Only obedience.


 
Anatoly Podgoretsky ©   (2008-08-07 21:03) [64]

> ketmar  (07.08.2008 20:54:03)  [63]

Я помню этот лозунг


 
umbra ©   (2008-08-07 23:53) [65]


> Диапазон все адресов это 2^32

не совсем. Диапазон адресов бродкаста вычисляется из адреса сети и маски. обычно гораздо меньше.



Страницы: 1 2 вся ветка

Текущий архив: 2008.09.28;
Скачать: CL | DM;

Наверх




Память: 0.6 MB
Время: 0.017 c
15-1217834074
McSimm
2008-08-04 11:14
2008.09.28
О рычагах


2-1219215836
ReYo
2008-08-20 11:03
2008.09.28
Как узнать какое windows - окно активно?


2-1219108231
Abcdef123
2008-08-19 05:10
2008.09.28
настройка среды Delphi 2007


15-1218034460
alex-drob
2008-08-06 18:54
2008.09.28
Новый закон о безнадзорности


2-1218794934
workbench
2008-08-15 14:08
2008.09.28
OnKeyUp