Конференция "Прочее" » Нет отличия INADDR_NONE от INADDR_BROADCAST ;(
 
  • Пробежал... (07.08.08 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' - а пакет в результате разойдется всем по броалкасту.
  • Пробежал... (07.08.08 14:32) [1]
    и еще конечно очень любопытно каким таким образом:

    >GetHostByName над строкой '255.255.255.255' возвращает IP-
    >адрес: '52.169.21.0'

    очень очень интересно...
  • tesseract © (07.08.08 14:41) [2]

    >  Допустим, через мой модуль пытаются послать данные на адрес
    > '255.255.255.255' - конечно, это неправильно так делать,
    >  но тем не менее работать то должно


    Не в windows. И даже по подсети не проходит. В *nix всё ок.
  • DVM © (07.08.08 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.
  • Сергей М. © (07.08.08 14:59) [4]

    > адреса можно и в другом формате записывать, и вроде даже
    > не через точку


    Какую конкретно нотацию ты имеешь ввиду ?
  • Rouse_ © (07.08.08 15:04) [5]
    У меня gethostbyname('255.255.255.255') возвращает в S_addr значение INADDR_NONE, так что что-то ты перемудрил :)
  • Dmitry S © (07.08.08 15:13) [6]

    > Rouse_ ©   (07.08.08 15:04) [5]

     INADDR_BROADCAST = -1;
     INADDR_NONE      = -1;
  • Anatoly Podgoretsky © (07.08.08 15:14) [7]
    > Сергей М.  (07.08.2008 14:59:04)  [4]

    Ну например в виде Cardinal в текстовом формате.
  • Rouse_ © (07.08.08 15:16) [8]

    >  INADDR_BROADCAST = -1;
    >  INADDR_NONE      = -1;

    И? Развивай мысль ;)
  • Anatoly Podgoretsky © (07.08.08 15:16) [9]
    > Dmitry S  (07.08.2008 15:13:06)  [6]

    Все правильно INADDR_BROADCAST это -1 или в ИНЕТ виде 255.255.255.255 или #FFFFFFFF
  • Dmitry S © (07.08.08 15:17) [10]

    > Rouse_ ©   (07.08.08 15:16) [8]

    INADDR_BROADCAST = INADDR_NONE, а следовательно определить, что вернула функция невозможно, в чем и сложность автора.
  • Anatoly Podgoretsky © (07.08.08 15:22) [11]
    А никакой сложности и нет, просто автору в голову не приходить проверить это до вызова функции.
    INADDR_NONE это результат функции
    INADDR_BROADCAST это самый большой броадкаст адрес
  • Rouse_ © (07.08.08 15:24) [12]

    > INADDR_BROADCAST = INADDR_NONE

    не совсем верно:

    единственное различие между ними в наличие знака. INADDR_BROADCAST - это unsigned int равное 0хFFFFFFFF, а INADDR_NONE - это код ошибки которую возвращают Winsocket функции типа connect, имеет тип int и значение -1
  • Rouse_ © (07.08.08 15:25) [13]
    зы: с кодом ошибки я наверное переборщил ;)
  • Dmitry S © (07.08.08 15:25) [14]
    Это что, если я кину в инет пакет с адресом INADDR_BROADCAST, то он будет отправлен всем-всем компам инета?
  • Anatoly Podgoretsky © (07.08.08 15:25) [15]
    Диапазон все адресов это 2^32 и если какое то значение использовать как признак ошибки, то понятно, что его нельзя будет различить с реальным значением. Это же получается тот самый знаменитый, от стальной птицы, вопрос "Как очистить переменную Integer"
  • Dmitry S © (07.08.08 15:27) [16]

    > Anatoly Podgoretsky ©   (07.08.08 15:25) [15]

    К примеру адрес 0.0.0.0 имеет какое либо значение вообще?
  • Rouse_ © (07.08.08 15:27) [17]

    > то он будет отправлен всем-всем компам инета?

    в пределах подсети
  • Anatoly Podgoretsky © (07.08.08 15:27) [18]
    > Rouse_  (07.08.2008 15:24:12)  [12]

    Переборщил, код ошибки беззнаковое целое longword/dWord/Cardinal
  • Anatoly Podgoretsky © (07.08.08 15:28) [19]
    > Dmitry S  (07.08.2008 15:25:14)  [14]

    Автор путает адреса с кодами ошибок, аппельсины с котлетами.
 
Конференция "Прочее" » Нет отличия INADDR_NONE от INADDR_BROADCAST ;(
Есть новые Нет новых   [134440   +2][b:0][p:0.001]