не подскажете, как в линухе, имея IP-адрес, узнать, не является ли он локальным (в смысле, не принадлежит ли он какому-либо из сетевых интерфейсов данной машины)? Есть ли более простой способ, чем получить все адреса всех интерфейсов, и поискать среди них?
$ ip route get 192.168.1.44 local 192.168.1.44 dev lo src 192.168.1.44
cache <local>
$ ip route get 192.168.1.45
192.168.1.45 dev eth0 src 192.168.1.44
cache
Как много веселых ребят, и все делают велосипед...
Здравствуйте, Pzz, Вы писали:
Pzz>Уважаемые коллеги,
Pzz>не подскажете, как в линухе, имея IP-адрес, узнать, не является ли он локальным (в смысле, не принадлежит ли он какому-либо из сетевых интерфейсов данной машины)? Есть ли более простой способ, чем получить все адреса всех интерфейсов, и поискать среди них?
Здравствуйте, Zhendos, Вы писали:
Pzz>>не подскажете, как в линухе, имея IP-адрес, узнать, не является ли он локальным (в смысле, не принадлежит ли он какому-либо из сетевых интерфейсов данной машины)? Есть ли более простой способ, чем получить все адреса всех интерфейсов, и поискать среди них?
Z>ip addr show | grep inet
1) мне бы програмно, яжпрограммист
2) ip addr show примерно это и делает, собирает все адреса со всех интерфейсов. А мне бы хотелось чего-нибудь более легковесного
Здравствуйте, Pzz, Вы писали:
Pzz>2) ip addr show примерно это и делает, собирает все адреса со всех интерфейсов. А мне бы хотелось чего-нибудь более легковесного
Здравствуйте, Pzz, Вы писали:
Pzz>2) ip addr show примерно это и делает, собирает все адреса со всех интерфейсов. А мне бы хотелось чего-нибудь более легковесного
Ну как бы если даже он так делает (и ifconfig, но его strace выглядит слегка иначе), то оно намекает что легковеснее нету
Pzz>1) мне бы програмно, яжпрограммист Pzz>2) ip addr show примерно это и делает, собирает все адреса со всех интерфейсов. А мне бы хотелось чего-нибудь более легковесного
что может быть легковеснее gethostname + gethostbyname?
[upd]
Ой, а в лялихе комбинация gethostname + gethostbyname выдает тока один адрес, и тот 127.0.0.1, а винда честно выдает все, наверное это потому что она хуже.
Как много веселых ребят, и все делают велосипед...
Здравствуйте, aik, Вы писали:
Pzz>>2) ip addr show примерно это и делает, собирает все адреса со всех интерфейсов. А мне бы хотелось чего-нибудь более легковесного
aik>Ну как бы если даже он так делает (и ifconfig, но его strace выглядит слегка иначе), то оно намекает что легковеснее нету
Не обязательно. У меня более частная задача, чем у них. И им все равно до легковесности, а мне — нет.
Здравствуйте, ononim, Вы писали:
O>Ой, а в лялихе комбинация gethostname + gethostbyname выдает тока один адрес, и тот 127.0.0.1, а винда честно выдает все, наверное это потому что она хуже.
И оба они выдают, что в базе имен написано, а не состояние интерфейсов.
O>>Ой, а в лялихе комбинация gethostname + gethostbyname выдает тока один адрес, и тот 127.0.0.1, а винда честно выдает все, наверное это потому что она хуже. Pzz>И оба они выдают, что в базе имен написано, а не состояние интерфейсов.
Фраза "is guaranteed that the name returned will be successfully parsed by gethostbyname and WSAAsyncGetHostByName" тут как бы намекает что все не так просто.
Как много веселых ребят, и все делают велосипед...
Здравствуйте, ononim, Вы писали:
O>Фраза "is guaranteed that the name returned will be successfully parsed by gethostbyname and WSAAsyncGetHostByName" тут как бы намекает что все не так просто.
Она как бы намекает, что синтаксическая корректность имени хоста гарантируется вендой.
O>>Фраза "is guaranteed that the name returned will be successfully parsed by gethostbyname and WSAAsyncGetHostByName" тут как бы намекает что все не так просто. Pzz>Она как бы намекает, что синтаксическая корректность имени хоста гарантируется вендой.
Там еще и такая фраза есть:
If no local host name has been configured, gethostname must succeed and return a token host name that gethostbyname or WSAAsyncGetHostByName can resolve.
Кстати, вот getifaddrs работает нормально в лялихе и тоже тяжеловестностью не отличается.
Как много веселых ребят, и все делают велосипед...
R>>Попробуй сделать bind к нему (к нулевому порту, чтобы порт выбирался автоматом). Pzz>О, хорошая мысль, спасибо!
Тото ты удивишься столкнувштсь с системой с включенным non-local bind.
Как много веселых ребят, и все делают велосипед...
Здравствуйте, ononim, Вы писали:
R>>>Попробуй сделать bind к нему (к нулевому порту, чтобы порт выбирался автоматом). Pzz>>О, хорошая мысль, спасибо! O>Тото ты удивишься столкнувштсь с системой с включенным non-local bind.
Можно взять порт с произвольным номером N, и забиндить сокет по адресу 0:N. И когда понадобится проверить адрес ADDR, попробовать забиндить другой сокет по адресу ADDR:N. Тогда, если адрес локальный, то будет ошибка EADDRINUSE, а если нелокальный, то либо EADDRNOTAVAIL, либо никакой, если разрешен нелокальный бинд.
Самое смешное, что я этот трюк с биндом сам придумал несколько лет назад, и даже использовал в каком-то проекте, но напрочь забыл, и не смог придумать опять. Наверное, старею
Здравствуйте, Pzz, Вы писали:
Pzz>2) ip addr show примерно это и делает, собирает все адреса со всех интерфейсов. А мне бы хотелось чего-нибудь более легковесного
ЕМНИП, каждому интерфейсу можно навесить неограниченное количество адресов, так что вряд ли есть более легковесное решение.