携帯電話が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. すべてのWiFi接続を取得する方法
- 3. 接続されたWiFiネットワークの信号レベルを取得
- 4. Apache Mina:接続されたクライアントからIPを取得する方法
- 5. クライアント側の接続のsocket.idを取得する方法は?
- 6. 接続されているクライアントの数を取得する
- 7. MySQLクライアント接続で保持されている名前付きMySQLロックのリストを取得する方法
- 8. 接続されたBTデバイスを取得する方法
- 9. androidで現在のWiFi接続情報を取得する方法
- 10. Socket.ioで接続しているユーザ/クライアントのリストを取得
- 11. 指定された単一のクライアントに接続する方法
- 12. node.jsでWiFiに接続されているすべてのMACアドレスを取得する方法は?
- 13. 2.0 socket.io取得接続されたクライアントは、
- 14. ooVoo Android SDK接続されたユーザのリストを取得
- 15. MonoTouch - 接続されたアウトレットのリストを取得
- 16. wifiテザリングをプログラムで有効にする
- 17. C++ Pipe [接続されたクライアントのIPアドレスまたはホスト名を取得する方法]
- 18. ADB経由でWiFiテザリング状態を見つける方法は?
- 19. AndroidでリストされたWIFIのMacアドレスを取得
- 20. USBテザリングとWiFiホットスポットインターフェイス間のAndroidネットワークブリッジ
- 21. postgresqlログに接続されたクライアントのMACアドレスを取得するには?
- 22. 手動WiFiからのホストアドレスの取得直接接続
- 23. Wifiカメラiosとの接続方法
- 24. ラズベリーPi3用のAndroid用のWiFiテザリングの設定方法
- 25. 接続されたアクセスポイントのMACアドレスを取得する方法は?
- 26. wifiが切断されたときにwpa_cliを使用してWiFi接続解除イベントを取得する方法
- 27. 最短距離で接続されたノードのリストを取得する
- 28. AWSラムダ関数のPythonに接続されたイベントソースのリストを取得する方法は?
- 29. アンドロイドで一貫したWIFI接続を作る方法
- 30. サプリカントで設定されたWiFiネットワークのBSSIDを取得する方法 - android?
このリンクをご確認ください。 http://stackoverflow.com/questions/21522961/how-to-get-the-client-device-details-which-is-connected-to-wifi-hotspot – user2711243