3


私はAndroidでモバイルアプリケーションを開発しています。 ここでは、解決策が見つからない
Androidフォンのusbテザリングの後で、コンピューターやシステムなどのIPアドレスを検出したいと思います 。次のコードを入力すると、電話のIPアドレスのみが使用され、システムのIPアドレスが必要になります

以下はコードです

  ArrayList<InetAddress> arrayList=new ArrayList<InetAddress>();

        try {
            for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
                NetworkInterface intf = en.nextElement();
                for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                    InetAddress inetAddress = enumIpAddr.nextElement();
                    arrayList.add(inetAddress);
                    inetAddress=null;
                }
            }
        } catch (SocketException ex) {
            Log.e("SALMAN", ex.toString());
        }
        return arrayList;


システムのIPアドレスを取得するのを手伝ってください。手段を取得できない場合は、私に連絡してください。私はアンドロイドに慣れていないので。


私はアンドロイド1.6を使用しています。


WindowsXPシステムにはサーバー側のアプリケーションがあります。そのアプリケーションは、C#.netによって開発されたWindowsサービスです。
そのWindowsサービスは、234などのポートをリッスンします。データがポートに到着すると、データを処理し、そのポートを介して応答を送信します。


androidでは、androidアプリケーションはソケットを介してWindowsサービスにデータを送信します。
アンドロイドフォンは、Windowsサービスが実行されているシステムにUSBテザー接続されています。システムは、アンドロイドフォンがモデムであると想定し、システム用に追加のIPアドレスが生成されます。このIPアドレスは、アンドロイドフォンがテザー接続されたときに動的に生成されます。
ソケットを介してモバイルからシステムにデータを転送する場合は、AndroidコーディングでシステムのIPアドレス(テザー後)を指定する必要があります。
このIPアドレスを取得するためのAndroidコーディングに何らかの方法がある場合。
みなさん、これに関してあなたの考えを教えてください。

4

2 に答える 2

8

テザリング後にAndroidからPCで作成されたIPアドレスを見つけることはできません。それを見つけるためのAPIや他の方法はありません。

InetAddressを使用すると、192.168.42.129が返されます。これはUSBテザリングによって作成されたDHCPアドレスです。それはあなたがコミュニケーションするのを助けません。

もう1つの方法は、IPのリストをスキャンすることです。USBテザリングは、192.168.42.1から192.168.42.255の範囲のIPを作成します。簡単なスキャナーを作成して、アクティブなスキャナーを見つけることができます。ただし、時間がかかります。

于 2012-08-07T05:47:03.940 に答える
3

上記の「SwimNSwim」に感謝します。/ proc / net / arpからIPアドレスとMACアドレスを取得する(Android)でコードを見つけました

有効なMACアドレスを持つ最初のIPを取得するように少し変更しました。テザーを使用してPCでシングルユーザーとして開発する場合に最適です。会社名などに基づいてさらに選択したIPについては、上記のリンクをたどることができます。

public static String getUSBThetheredIP() {

    BufferedReader bufferedReader = null;
    String ips="";

    try {
        bufferedReader = new BufferedReader(new FileReader("/proc/net/arp"));

        String line;
        while ((line = bufferedReader.readLine()) != null) {
            String[] splitted = line.split(" +");
            if (splitted != null && splitted.length >= 4) {
                String ip = splitted[0];
                String mac = splitted[3];
                if (mac.matches("..:..:..:..:..:..")) {
                    if (mac.matches("00:00:00:00:00:00")) {
                        //Log.d("DEBUG", "Wrong:" + mac + ":" + ip);
                    } else {
                        //Log.d("DEBUG", "Correct:" + mac + ":" + ip);
                        ips = ip;
                        break;
                    }
                }
            }
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally{
        try {
            bufferedReader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return ips;
}

新しいIPを有効にするには、テザリングを解除するたびに、PCでapacheまたはその他のプロセスを開始する必要があることに注意してください。これは私が経験したことです。

于 2016-04-19T07:35:27.593 に答える