Не существует окончательного способа узнать, какие компьютеры используют тот же маршрутизатор, что и ваш IP-адрес. Вам нужно будет проверить сетевые настройки каждой машины (что будет зависеть от конфигурации ОС). Вы, конечно, не сможете ограничить свою пропускную способность от такого рода программ. Чтобы это сделать, вам необходимо изменить правила маршрутизатора и/или брандмауэра.
Машины не поддерживают «соединение» с маршрутизатором постоянно. DHCP-сервер (который может или не может быть маршрутизатором) может содержать список машин, которым он предоставлен, но машины со статическими IP-адресами не будут в этом списке.
Возможно также (хотя и необычно), что более одной машины в подсети может действовать как маршрутизатор в зависимости от назначения пакета.
Например, машины в сети 192.168.0.0/24
может взаимодействовать с сетью 192.168.8.0/24
через маршрутизатор, который имеет два адреса (192.168.0.254
и 192.168.8.254
), но общаться с интернета через маршрутизатор на 192.168.0.1
. Невозможно обнаружить это поведение без проверки сетевой конфигурации каждой машины. Вы не можете сказать только с IP-адреса.
Теперь, если вы просто хотите узнать, какие машины находятся в одной и той же подсети, вы можете посмотреть свой IP-адрес и сетевую маску вместе, чтобы выяснить адреса для проверки. Это НЕ ОКАЗЫВАЕТ сказать вам, если они используют ваш маршрутизатор, но есть приличный шанс, что они будут.
адреса вы хотите проверить, являются те, между сети адресом (который является вашим диапазоном IP со всеми битами хоста установлен в 0), и ваш вещание адреса (который является IP-диапазон, 're, со всеми битами хоста, установленными в 1).
ПРЕДУПРЕЖДЕНИЕ: В зависимости от среды, следующий код может получить Вас в большой куче очень большие неприятности. Многие сетевые администраторы будут очень недовольны вами, если вы это сделаете, потому что это похоже на предшественницу атаки. Используйте это на свой страх и риск и не забудьте спросить разрешения своего администратора, прежде чем делать это.
Это поможет вам ваш сети адрес и маску подсети (Примечание.. Этот код должен быть IPv6 безопасным я не проверял это в среде IPv6)
InetAddress localhost = InetAddress.getLocalHost();
NetworkInterface iFace = NetworkInterface.getByInetAddress(localhost);
int prefix = iFace.getInterfaceAddresses().get(0).getNetworkPrefixLength();
InetAddress bcastAddress = iFace.getInterfaceAddresses().get(0).getBroadcast();
int addrSize = localhost.getAddress().length * 8;
byte[] maskBytes = new byte[localhost.getAddress().length];
for (int i = 0; i < prefix; ++i) {
maskBytes[i/8] |= 1 << (7 - i % 8);
}
byte[] net = Arrays.copyOf(localhost.getAddress(), localhost.getAddress().length);
for (int i = 0; i < net.length; ++i) {
net[i] = (byte)(net[i] & maskBytes[i]);
}
InetAddress networkAddress = InetAddress.getByAddress(net);
Сделав это, вы можете между этими двумя адресами. Все между ними - потенциальный хост в той же подсети.
List<InetAddress> addresses = new ArrayList<InetAddress>();
BigInteger bcastNum = new BigInteger(bcastAddress.getAddress());
BigInteger workNum = new BigInteger(net).add(BigInteger.ONE);
while (workNum.compareTo(bcastNum) < 0) {
InetAddress toCheck = InetAddress.getByAddress(workNum.toByteArray());
if (toCheck.isReachable(20)) {
addresses.add(toCheck);
}
workNum = workNum.add(BigInteger.ONE);
}
Возможно, вы захотите увеличить этот тайм-аут с 20 мс, в зависимости от ваших потребностей.
Что вы подразумеваете под "Connected to router?" Вы хотите сказать, что вам нужен список компьютеров в той же подсети, что и машина, выполняющая эту программу? –
Брат я хочу узнать список машин, подключенных к тому же маршрутизатору, через который я тоже подключен. –
Вы не можете сделать это удаленно. Я отправлю ответ, чтобы объяснить, почему. –