Сканируйте IP и MAC всех локальных устройств, подключенных к сети Wi-Fi или маршрутизатору на Android 13.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Сканируйте IP и MAC всех локальных устройств, подключенных к сети Wi-Fi или маршрутизатору на Android 13.

Сообщение Anonymous »

Я создаю приложение для сканирования IP и MAC всех устройств, подключенных к сети, но я могу получить только их IP, а когда я получаю IP-адреса, оно делает это не очень хорошо, оно получает только от сотовые телефоны, но не с ноутбуков или компьютеров, подключенных к маршрутизатору с помощью кабеля.
Я пытался сделать это с помощью arp -a, но это больше не работает на Android 13.
Я вижу, что некоторые приложения, такие как
Сетевой сканер и Wi-FI Monitor могут получить IP и MAC
На данный момент это мой код, но он получает только IP-адреса и не сканирует все устройства. Может ли кто-нибудь помочь мне правильно получить все устройства с их IP и MAC?

public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private static final int REQUEST_CODE_PERMISSIONS = 1;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

if (ContextCompat.checkSelfPermission(this, Manifest.permission.INTERNET) != PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_WIFI_STATE) != PackageManager.PERMISSION_GRANTED) {

ActivityCompat.requestPermissions(this, new String[]{
Manifest.permission.INTERNET,
Manifest.permission.ACCESS_WIFI_STATE
}, REQUEST_CODE_PERMISSIONS);
}

Button scanButton = findViewById(R.id.scanButton);
scanButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new ScanNetworkTask().execute();
}
});
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_CODE_PERMISSIONS) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
findViewById(R.id.scanButton).setEnabled(true);
} else {
Log.e(TAG, "Permissions denied by user.");
findViewById(R.id.scanButton).setEnabled(false);
}
}
}

private class ScanNetworkTask extends AsyncTask {

@Override
protected Void doInBackground(Void... voids) {
try {
scanNetwork();
} catch (IOException e) {
Log.e(TAG, "IOException in scanNetwork: ", e);
}
return null;
}

private void scanNetwork() throws IOException {
try {
NetworkInterface wlan0 = NetworkInterface.getByName("wlan0");
if (wlan0 != null && wlan0.isUp()) {
Enumeration addresses = wlan0.getInetAddresses();
while (addresses.hasMoreElements()) {
InetAddress address = addresses.nextElement();
if (address.isLoopbackAddress() || !address.isSiteLocalAddress()) {
continue;
}

String subnet = getSubnet(address.getHostAddress());
Log.d(TAG, "Scanning subnet: " + subnet);

for (int i = 1; i < 255; i++) {
String host = subnet + i;
try {
InetAddress inetAddress = InetAddress.getByName(host);
if (inetAddress.isReachable(1000)) {
Log.d(TAG, "Host: " + inetAddress.getHostAddress() + " is reachable");
Log.d(TAG, "Hostname: " + inetAddress.getHostName());
}
} catch (IOException e) {
Log.e(TAG, "IOException in scanNetwork: ", e);
}
}
}
}
} catch (SocketException e) {
Log.e(TAG, "SocketException in scanNetwork: ", e);
}
}

private String getSubnet(String ipAddress) {
return ipAddress.substring(0, ipAddress.lastIndexOf('.') + 1);
}
}
}



Подробнее здесь: https://stackoverflow.com/questions/788 ... uter-on-an
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»