Gibt es eine Möglichkeit, eine Liste der verbundenen MAC-Adressen zu erhalten, wenn sich mein Telefon im Wi-Fi-Tethering-Modus befindet?Wi-Fi-Tethering - Wie erhalte ich eine Liste der verbundenen Clients?
Antwort
Zuerst müssen Sie ein gerootetes Gerät haben. Wenn es fertig ist, lesen Sie einfach dnsmasq.leases Datei. Normalerweise befindet es sich unter: /data/misc/dhcp/dnsmasq.leases. Eine Struktur der Datei ist ziemlich einfach - jede Zeile ist eine Zusammenfassung eines verbundenen Benutzers. Die Zusammenfassung enthält mehrere Felder einschließlich MAC. Ich habe keine Möglichkeit gefunden, MAC ohne root zu bekommen. Bitte korrigieren Sie mich, falls ich falsch liege.
was ist mit Clients verbunden mit statischen ip nicht dhcp, sie Wird nicht in der Dnsmasq erscheinen, hast du eine Idee? – user935143
Gibt es keine Klasse von 'android' Paket, um diesen Job zu machen? –
/proc/net/arp
Lesen der Informationen für bieten würde sowohl statische als auch DHCP-Clients, die während der letzten 60 Sekunden mit dem Gerät kommuniziert haben (konfiguriert in /proc/sys/net/ipv4/neigh/wl0.1/gc_stale_time
wl0.1
wo die Schnittstelle mit dem Telefon drahtloses Netzwerk).
Es ist auch für Nicht-Root-Benutzer verfügbar.
Ist das wahr unter/proc/net/arp aktualisiert nicht immer die Liste, wenn das Gerät (Client) von der AP @Roman getrennt? – gumuruh
@SuppressWarnings("ConstantConditions")
public static String getClientMacByIP(String ip)
{
String res = "";
if (ip == null)
return res;
String flushCmd = "sh ip -s -s neigh flush all";
Runtime runtime = Runtime.getRuntime();
try
{
runtime.exec(flushCmd,null,new File("/proc/net"));
}
BufferedReader br;
try
{
br = new BufferedReader(new FileReader("/proc/net/arp"));
String line;
while ((line = br.readLine()) != null)
{
String[] sp = line.split(" +");
if (sp.length >= 4 && ip.equals(sp[0]))
{Assistance.Log(sp[0]+sp[2]+sp[3],ALERT_STATES.ALERT_STATE_LOG);
String mac = sp[3];
if (mac.matches("..:..:..:..:..:..") && sp[2].equals("0x2"))
{
res = mac;
break;
}
}
}
br.close();
}
catch (Exception e)
{}
return res;
}
// ----------------------------------------- ---------------
@SuppressWarnings("ConstantConditions")
public static String getClientIPByMac(String mac)
{
String res = "";
if (mac == null)
return res;
String flushCmd = "sh ip -s -s neigh flush all";
Runtime runtime = Runtime.getRuntime();
try
{
runtime.exec(flushCmd,null,new File("/proc/net"));
}
BufferedReader br;
try
{
br = new BufferedReader(new FileReader("/proc/net/arp"));
String line;
while ((line = br.readLine()) != null)
{
String[] sp = line.split(" +");
if (sp.length >= 4 && mac.equals(sp[3]))
{
String ip = sp[0];
if (ip.matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}") && sp[2].equals("0x2"))
{
res = ip;
break;
}
}
}
br.close();
}
catch (Exception e)
{}
return res;
}
public static ArrayList<String> getConnectedDevicesMac()
{
ArrayList<String> res = new ArrayList<String>();
//NetManager.updateArpFile();
BufferedReader br;
try
{
br = new BufferedReader(new FileReader("/proc/net/arp"));
String line;
line = br.readLine();
while ((line = br.readLine()) != null)
{
String[] sp = line.split(" +");
if (sp[3].matches("..:..:..:..:..:.."))
res.add(sp[3]);
}
br.close();
}
catch (Exception e)
{}
return res;
}
Bitte geben Sie einige zusätzliche Informationen darüber, was Ihr Code macht. Es ist schwer für jemanden neu zu sagen, was vor sich geht. –
Bitte diesen Link überprüfen. http://stackoverflow.com/questions/21522961/how-to-get-the-client-device-details-which-is-connected-to-wifi-hotspot – user2711243