Форум: "Прочее";
Текущий архив: 2008.09.28;
Скачать: [xml.tar.bz2];
ВнизНет отличия INADDR_NONE от INADDR_BROADCAST ;( Найти похожие ветки
← →
Пробежал... (2008-08-07 14:31) [0]Вот такая забубень, что INADDR_NONE и INADDR_BROADCAST имеют одно значение... Чем это плохо спросите вы?
Дело в том, что мой модуль работает так: сначала пытается делать inet_addr, если получает INADDR_NONE, то делает вывод что строка не является IP-адресом, применяет к ней GetHostByName и если удается получить IP - то посылает данные. Достаточно банальный и часто используемый способ работы.
Но все дело портят броадкасты. Допустим, через мой модуль пытаются послать данные на адрес "255.255.255.255" - конечно, это неправильно так делать, но тем не менее работать то должно. А что получается? Мой модуль делает inet_addr, уж не знаю что возвращает эта функция, что она имеет в виду - INADDR_NONE или INADDR_BROADCAST, отличить то невозможно! После чего над строкой адреса "255.255.255.255" делается GetHostByName, и вот тут второй парадокс... Оно срабатывает!
И более того, GetHostByName над строкой "255.255.255.255" возвращает IP-адрес: "52.169.21.0" !!! Откуда? Что это? Науке неизвестно... В результате данные уходят черт знает куда по конкретному IP-адресу, хотя указан адрес broadcast.
Внимание, вопрос! А как вообще определить броадкаст это адрес или нет? Можно проверять строку на совпадение с "255.255.255.255" - но это костыль, ибо ведь известно, что адреса можно и в другом формате записывать, и вроде даже не через точку... Что же делать? Да и GetHostByName над каким-нибудь локальным "vasya_pupkin.local" может разрешиться в 255.255.255.255 по идее, а это не отличить от INADDR_NONE. Как же быть?!
Посылать данные в любом случае, даже если адрес INADDR_NONE тоже не вариант, а то будут посылать на всякие левые домены "afiuoageh.locadsfg" - а пакет в результате разойдется всем по броалкасту.
← →
Пробежал... (2008-08-07 14:32) [1]и еще конечно очень любопытно каким таким образом:
>GetHostByName над строкой "255.255.255.255" возвращает IP-
>адрес: "52.169.21.0"
очень очень интересно...
← →
tesseract © (2008-08-07 14:41) [2]
> Допустим, через мой модуль пытаются послать данные на адрес
> "255.255.255.255" - конечно, это неправильно так делать,
> но тем не менее работать то должно
Не в windows. И даже по подсети не проходит. В *nix всё ок.
← →
DVM © (2008-08-07 14:44) [3]
> И более того, GetHostByName над строкой "255.255.255.255"
> возвращает IP-адрес: "52.169.21.0" !!! Откуда? Что это?
IP-адрес: 52.169.21.0
OrgName: E.I. du Pont de Nemours and Co., Inc.
OrgID: EDPDNC
Address: E.I. du Pont de Nemours and Co., Inc.
Address: 1007 market Street
City: Wilmington
StateProv: DE
PostalCode: 19893
Country: US
NetRange: 52.0.0.0 - 52.255.255.255
CIDR: 52.0.0.0/8
NetName: DUPONT1
NetHandle: NET-52-0-0-0-1
Parent:
NetType: Direct Assignment
NameServer: APOLLO.LVS.DUPONT.COM
NameServer: DNSAUTH1.SYS.GTEI.NET
NameServer: DNSAUTH2.SYS.GTEI.NET
NameServer: DNSAUTH3.SYS.GTEI.NET
Comment:
RegDate: 1991-12-19
Updated: 2007-08-01
OrgTechHandle: DAC69-ARIN
OrgTechName: DUPONT ARIN CONTACT
OrgTechPhone: +1-302-992-2941
OrgTechEmail: contact@usa.dupont.com
# ARIN WHOIS database, last updated 2008-08-06 19:10
# Enter ? for additional hints on searching ARIN"s WHOIS database.
← →
Сергей М. © (2008-08-07 14:59) [4]
> адреса можно и в другом формате записывать, и вроде даже
> не через точку
Какую конкретно нотацию ты имеешь ввиду ?
← →
Rouse_ © (2008-08-07 15:04) [5]У меня gethostbyname("255.255.255.255") возвращает в S_addr значение INADDR_NONE, так что что-то ты перемудрил :)
← →
Dmitry S © (2008-08-07 15:13) [6]
> Rouse_ © (07.08.08 15:04) [5]
INADDR_BROADCAST = -1;
INADDR_NONE = -1;
← →
Anatoly Podgoretsky © (2008-08-07 15:14) [7]> Сергей М. (07.08.2008 14:59:04) [4]
Ну например в виде Cardinal в текстовом формате.
← →
Rouse_ © (2008-08-07 15:16) [8]
> INADDR_BROADCAST = -1;
> INADDR_NONE = -1;
И? Развивай мысль ;)
← →
Anatoly Podgoretsky © (2008-08-07 15:16) [9]> Dmitry S (07.08.2008 15:13:06) [6]
Все правильно INADDR_BROADCAST это -1 или в ИНЕТ виде 255.255.255.255 или #FFFFFFFF
← →
Dmitry S © (2008-08-07 15:17) [10]
> Rouse_ © (07.08.08 15:16) [8]
INADDR_BROADCAST = INADDR_NONE, а следовательно определить, что вернула функция невозможно, в чем и сложность автора.
← →
Anatoly Podgoretsky © (2008-08-07 15:22) [11]А никакой сложности и нет, просто автору в голову не приходить проверить это до вызова функции.
INADDR_NONE это результат функции
INADDR_BROADCAST это самый большой броадкаст адрес
← →
Rouse_ © (2008-08-07 15:24) [12]
> INADDR_BROADCAST = INADDR_NONE
не совсем верно:
единственное различие между ними в наличие знака. INADDR_BROADCAST - это unsigned int равное 0хFFFFFFFF, а INADDR_NONE - это код ошибки которую возвращают Winsocket функции типа connect, имеет тип int и значение -1
← →
Rouse_ © (2008-08-07 15:25) [13]зы: с кодом ошибки я наверное переборщил ;)
← →
Dmitry S © (2008-08-07 15:25) [14]Это что, если я кину в инет пакет с адресом INADDR_BROADCAST, то он будет отправлен всем-всем компам инета?
← →
Anatoly Podgoretsky © (2008-08-07 15:25) [15]Диапазон все адресов это 2^32 и если какое то значение использовать как признак ошибки, то понятно, что его нельзя будет различить с реальным значением. Это же получается тот самый знаменитый, от стальной птицы, вопрос "Как очистить переменную Integer"
← →
Dmitry S © (2008-08-07 15:27) [16]
> Anatoly Podgoretsky © (07.08.08 15:25) [15]
К примеру адрес 0.0.0.0 имеет какое либо значение вообще?
← →
Rouse_ © (2008-08-07 15:27) [17]
> то он будет отправлен всем-всем компам инета?
в пределах подсети
← →
Anatoly Podgoretsky © (2008-08-07 15:27) [18]> Rouse_ (07.08.2008 15:24:12) [12]
Переборщил, код ошибки беззнаковое целое longword/dWord/Cardinal
← →
Anatoly Podgoretsky © (2008-08-07 15:28) [19]> Dmitry S (07.08.2008 15:25:14) [14]
Автор путает адреса с кодами ошибок, аппельсины с котлетами.
← →
Rouse_ © (2008-08-07 15:28) [20]
> код ошибки беззнаковое целое longword/dWord/Cardinal
Результат функции int, тут я не верно назвал. Вообще оригинальная декларация выглядит как:#define INADDR_BROADCAST (u_long)0xffffffff
#define INADDR_NONE 0xffffffff
← →
Сергей М. © (2008-08-07 15:30) [21]
> Anatoly Podgoretsky © (07.08.08 15:14) [7]
Ну и что ?
Я не понимаю, где костыль ..
Сложно что ли проверить адрес по шаблонам рег.выражений для всех мыслимых нотаций ? Совсем не сложно)
Да и какой идиот будет передавать IPv4-адрес не в Беркли-нотации ?
А если и найдутся такие, почему не дать им отлуп вида "адрес задан неверно" ?
← →
Dmitry S © (2008-08-07 15:36) [22]
> Rouse_ © (07.08.08 15:27) [17]
>
>
> > то он будет отправлен всем-всем компам инета?
>
> в пределах подсети
какой подсети именно?
← →
Anatoly Podgoretsky © (2008-08-07 15:38) [23]> Dmitry S (07.08.2008 15:27:16) [16]
Имеет, это самая большая сеть, нулевая, вот к ней то и применяется данный адрес.
← →
Rouse_ © (2008-08-07 15:40) [24]
> какой подсети именно?
В твоей есесно :))))
← →
Anatoly Podgoretsky © (2008-08-07 15:40) [25]> Rouse_ (07.08.2008 15:27:17) [17]
В общем случае не верно. В рамках текущей маршрутизации, ничто не ограничивает посылать в любые сети. Просто в частном случае есть соглашение, что маршрутизаторы, особо (в обязательном порядке) смотрящие в Сеть не пропускают данные пакеты, но в тоже время это нормальное действие в локальных сетях.
← →
Rouse_ © (2008-08-07 15:41) [26]
> В общем случае не верно.
Скажем так: в большинстве случае верно, настроить сеть то конечно можно по разному :)
← →
Anatoly Podgoretsky © (2008-08-07 15:42) [27]> Сергей М. (07.08.2008 15:30:21) [21]
А я что по твоему предложил?
У него входящий параметр "255.255.255.255" вот его и надо проверять до вызова функции, при том не в любых нотациях, у него формат, согласно его же словам, четко зафиксирован.
← →
Anatoly Podgoretsky © (2008-08-07 15:54) [28]> Rouse_ (07.08.2008 15:41:26) [26]
Кульхачкеры очень мечтают сделать PING 255.255.255.255 и задосить всю Сеть :-)
← →
Dmitry S © (2008-08-07 16:01) [29]С ping 255.255.255.255 ясно. А почему тогда не получается сделать ping 192.168.0.255 (на широковещательный адрес локальной сети)...
PS. Кстати ping 255.255.255.255 говорит, что "При проверке связи не удалось обнаружить узел 255.255.255.255. Проверьте имя узла и повторите попытку."
← →
Anatoly Podgoretsky © (2008-08-07 16:09) [30]> Dmitry S (07.08.2008 16:01:29) [29]
Этот PS говорит о подобной программе, которая получила -1 в ответ на функцию.
Кстати и хорошо, нефиг досить сеть.
А PING это не UDP и не даже TCP
← →
ketmar © (2008-08-07 16:28) [31]>[29] Dmitry S © (2008-08-07 16:01:00)
0.0.0.0, так же, как 255.255.255.255 — «фиктивные» адреса. их на самом деле нет. а 192.168.0.255 — вполне конкретный адрес.
---
Understanding is not required. Only obedience.
← →
Anatoly Podgoretsky © (2008-08-07 16:33) [32]> ketmar (07.08.2008 16:28:31) [31]
В рамках супер сети - да, но в рамках сети 192.168.0.255 такой же фиктивный, маленький бродкаст и 192.168.0.0 сеть.
← →
Пробежал... (2008-08-07 16:34) [33]
> Не в windows. И даже по подсети не проходит
ты ошибаешься.
> IP-адрес: 52.169.21.0
> OrgName: E.I. du Pont de Nemours and Co., Inc.
> OrgID: EDPDNC
...
я и сам прекрасно могу сделать whois. Ну принадлежит это компании какой-то, толку то? Вопрос не кому принадлежит, а какого хрена такой адрес образуется.
> Какую конкретно нотацию ты имеешь ввиду ?
да откуда я знаю? Я как разработчик модуля понятия не имею в каком там формате мне зададут имя хоста строкой. Ручками обрабатывать какие-то варианты - не айс, мало ли что. Хочется гибкости и чтобы за меня это кто-нибудь сделал, например windows... неужели так нельзя?
Зачем мне изучать все возможные нотации, мало ли их сколько...
> У меня gethostbyname("255.255.255.255") возвращает в S_addr
> значение INADDR_NONE, так что что-то ты перемудрил :)
Розыч, я сам в шоке!!! Причем, при последовательных вызовах этого кода адрес одинаковый. Но при разных запусках приложения адрес каждый раз разный и никакой последовательности, как будто это random...
Смотри картинку! http://sharepix.ru/204333k07/ - мож я ступил где?
← →
Rouse_ © (2008-08-07 16:37) [34]0.0.0.0 зарезервирован как адрес роутера по умолчанию.
← →
ketmar © (2008-08-07 16:38) [35]>[32] Anatoly Podgoretsky © (2008-08-07 16:33:00)
я к тому, что 0 и -1 никогда не будут «валидным адресом». а 192.168.0.255 — запросто (хотя это и криво).
>[33] Пробежал… (2008-08-07 16:34:00)
не занимайся неясно чем, проверяй 255.255.255.255 руками. у него всё равно имени нет. а если кто-то как-то прописал алиас — то этот кто-то большой дурак.
---
Understanding is not required. Only obedience.
← →
Dmitry S © (2008-08-07 16:43) [36]
> (хотя это и криво)
А что кривого-то? Адрес как адрес.
> В рамках супер сети - да, но в рамках сети 192.168.0.255
> такой же фиктивный, маленький бродкаст и 192.168.0.0 сеть.
>
Тоже не факт.
> Розыч, я сам в шоке!!! Причем, при последовательных вызовах
> этого кода адрес одинаковый. Но при разных запусках приложения
> адрес каждый раз разный и никакой последовательности, как
> будто это random...
Может быть винда определила, что адрес кривой, и не удосужилась заполнить данное поле, хотя бы нулями?
← →
Сергей М. © (2008-08-07 16:44) [37]
> откуда я знаю? Я как разработчик модуля понятия не имею
> в каком там формате мне зададут имя хоста строкой
Довольно странно это - разрабатывать модуль, не имея утвержденного протокола межмодульного взаимодействия)
Впрочем, вариантов-то не так много - либо имя хоста либо адрес)
← →
Anatoly Podgoretsky © (2008-08-07 16:54) [38]> Пробежал... (07.08.2008 16:34:33) [33]
Да не мучайся, тебе нужен этот адрес или нет?
Если не нужен считай что он невозможен INADDR_NONE и делов то.
Другое дело если с этим адресом надо работать, тут до inet_addr нужна предобработка.
← →
Anatoly Podgoretsky © (2008-08-07 16:56) [39]> Rouse_ (07.08.2008 16:37:34) [34]
Ты имеешь в виду 0.0.0.0/0.0.0.0 как ANY_NETWORK/ANY_INTERFACE и т.д. эту сеть часто используют в данном качестве, как 255,255.255.255 может быть использован не как адрес броадкаста. Просто два особых адреса и потребность в ANY и ERROR
← →
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 то это реальный адрес, а не адрес броадкаста, тоже адрес сети. Все зависит от маски.
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2008.09.28;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.049 c