Это кажется, что Вы пробуете, "планируют" сеть, идущую от нулевого знания того, что "там" к полному знанию каждого устройства, которое достижимо от данной точки.
Linux управляет как ethtool
может сказать Вам, подключены ли Ваши интерфейсы физически к чему-то еще. Таким образом, это - хорошее начало. Конечно, если вещью, с которой Вы подключены, является маршрутизатор или переключатель, затем у Вас есть дополнительная работа, чтобы сделать.
Это - на самом деле глубокая и сложная проблема. Нет общепризнанного "эй, я - здесь" протокол кроме ping, который часто отключается из соображений безопасности.
Continuning, однако, следующая вещь работать от является Вашей текущей маской подсети. Это должно сказать Вам диапазон IP-адресов, что возможно общаться с из того интерфейса. Сканирование каждого возможного IP-адреса подсети обычно является самым надежным способом сделать это (использование инструмента как nmap
выполнять его). Лучше, если протокол существует для поддержки этой цели, как ping, CDP для устройств Cisco или LLTD для Windows Vista / системы XP.
Если Вы находитесь в ситуации, где Вы имеете дело с несколькими маршрутизаторами LAN, то можно использовать маршруты в FIB ( route
или ip route show
команда), для приобретения знаний о других подсетях, которые должны быть косвенно достижимыми. Вы затем имеете дополнительный известный - достижимые диапазоны IP для сканирования.
Однако, если мы говорим обо всем Интернете или очень большой подсети, затем это становится непрактичным. В этом случае осуществимое решение состоит в том, чтобы обычно полагаться на сервисы "исследования" или "рандеву", такие как IGMP или Добрый день. Вы затем во власти только знания об устройствах, которые хотят быть известными о. Но это лучше, чем попытка к сканированию портов весь Интернет.
t_open()
и его связанное /dev/tcp
и такова часть интерфейса TLI/XTI, который проиграл сражение для API TCP/IP к сокетам BSD.
На Linux существует a /dev/tcp
своего рода. Это не реальный файл или устройство ядра. Это - что-то особенно обеспеченное Bash, и это существует только для перенаправлений. Это означает это, даже если нужно было создать в ядре /dev/tcp
средство, это было бы замаскировано в интерактивном использовании 99% [*] времени оболочкой.
Лучшее решение действительно состоит в том, чтобы переключиться на сокеты BSD.Прошу прощения.
Вы смогли заставлять strxnet XTI слой эмуляции работать, но Вы - более обеспеченное помещение Вашего времени в выход из XTI. Это - мертвый API, неподдерживаемый не только на Linux, но также и на BSDs, включая OS X.
(Между прочим, strxnet библиотека не будет даже основываться на BSDs, потому что она зависит от LiS, компонента ядра Linux. Это не будет даже configure
на запасе BSD или система OS X, по-видимому, потому что это также зависит от GNU sed.)
[*] я основываю это произвольное предположение на том, что Bash является оболочкой по умолчанию для некорневых пользователей во всех дистрибутивах Linux, которые я использовал. Поэтому необходимо стараться изо всех сил на Linux, как правило, получать что-то другое, чем Bash.
-I
и-L
флаги и ожидают, что это будет работать. Но если бы это не делает, я не бросил бы много времени в нем. – Warren Young 16.05.2012, 15:49libstrxnet.so.*
: тот каталог - то, чему Вы передаете-L
. Найтиxti.h
: передайте тот каталог-I
. Вам также будет нужно-lstrxnet
в минимуме. Нижняя строка: см. strxnet документы. – Warren Young 16.05.2012, 16:00