携帯電話がWi-Fiテザリングモードになっているときに、接続されたMACアドレスのリストを取得する方法はありますか?Wi-Fiテザリング - 接続されたクライアントのリストを取得する方法
答えて
まず、ルートデバイスが必要です。それが完了したらちょうどdnsmasq.leasesファイルを読んでください。通常は/data/misc/dhcp/dnsmasq.leasesに配置されます。 ファイルの構造はかなりシンプルです。各行は接続されたユーザーの要約です。要約には、MACを含むいくつかのフィールドがあります。 ルートなしでMACを取得する可能性はありませんでした。私が間違っているなら、私を修正してください。
静的IPに接続されているクライアントはdhcpではありません。 dnsmasqには表示されません、あなたは何か考えていますか? – user935143
このジョブを実行するための 'android'パッケージのクラスはありませんか? –
/proc/net/arp
を読むと、最後の60秒間にデバイスと通信したスタティッククライアントとDHCPクライアントの両方の情報が提供されます(電話機のwl0.1
は/proc/sys/net/ipv4/neigh/wl0.1/gc_stale_time
に設定されています)。
root以外のユーザーも利用できます。
これは/ proc/net/arpで真実ですか?デバイス(クライアント)がAP @Romanから切断されたとき、arpが常にリストを更新するとは限りませんか? – 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;
}
あなたのコードが何をしているかについての追加情報を提供してください。何が起こっているのか誰にも分かりにくいです。 –
- 1. wcfサービスの接続されたクライアントのリストを取得する
- 2. Apache Mina:接続されたクライアントからIPを取得する方法
- 3. MySQLクライアント接続で保持されている名前付きMySQLロックのリストを取得する方法
- 4. 接続されたBTデバイスを取得する方法
- 5. androidで現在のWiFi接続情報を取得する方法
- 6. MonoTouch - 接続されたアウトレットのリストを取得
- 7. wifiテザリングをプログラムで有効にする
- 8. サプリカントで設定されたWiFiネットワークのBSSIDを取得する方法 - android?
- 9. WiFi接続が
- 10. アンドロイドWIFI接続
- 11. WiFi接続名
- 12. Android - 登録されたジオフェンスのリストを取得する方法
- 13. 連結されたテキストノードのリストを取得する方法
- 14. WiFiに接続する
- 15. J2MEのWiFiアクセスポイントのリストを取得
- 16. Facebook SDK-PHP:接続されたユーザーのUIDを取得する
- 17. Redis serviceStackプールされた接続クライアント
- 18. アンドロイドのWiFiルーターに接続されたシステムの検出
- 19. WIFI経由で接続されたコンピュータからの印刷
- 20. HTML5 appcache、クライアントにキャッシュされたファイルのリストを取得
- 21. QTアプリケーション--- WIFI接続
- 22. AndroidでWIFI自動接続を無効にする方法
- 23. Pythonを使用してWiFiネットワークに接続する方法は?
- 24. AndroidでWiFi接続情報を保存する方法
- 25. 接続されたクライアントのIPアドレスを取得するにはどうすればよいですか?
- 26. 接続されたクライアントのホスト名をjavaで取得するにはどうすればよいですか?
- 27. OpenCVバイナリイメージ内の接続されたコンポーネントのリストを見つける方法
- 28. php接続されたすべてのクライアントソケットを取得
- 29. クライアントからサーバに接続されたクライアントのC
- 30. iPhoneが接続されているルータのIPアドレスを取得する
このリンクをご確認ください。 http://stackoverflow.com/questions/21522961/how-to-get-the-client-device-details-which-is-connected-to-wifi-hotspot – user2711243