Làm cách nào để lấy địa chỉ IP của Trình giả lập Android?


75

Tôi muốn lấy địa chỉ IP của Trình mô phỏng Android hiện đang chạy thông qua mã. Làm thế nào nó có thể đạt được?


1
Có lẽ liên quan ở đâyở đây .
hhh

@hhh Liên kết thứ hai bị hỏng. :)
Muhamed Huseinbašić

1
@ MuhamedHuseinbašić Tôi cảm thấy luồng này đã giải quyết được vấn đề trong luồng thứ hai nên quyết định xóa nó để giữ mọi thứ đơn giản.
hhh

Câu trả lời:


159

Chỉ cần làm rõ: từ bên trong ứng dụng của bạn, bạn có thể chỉ cần gọi trình giả lập là 'localhost' hoặc 127.0.0.1.

Lưu lượng truy cập web được định tuyến thông qua máy phát triển của bạn, vì vậy IP bên ngoài của trình giả lập là bất kỳ IP nào đã được nhà cung cấp của bạn gán cho máy đó. Máy phát triển luôn có thể được kết nối từ thiết bị của bạn tại 10.0.2.2.

Vì bạn chỉ hỏi về IP của trình giả lập , bạn đang cố gắng làm gì?


8
Tôi muốn ủng hộ bạn 100 lần cho điều này. Tôi không thể tìm ra cách ứng dụng của mình có thể kết nối với một máy chủ cục bộ khác mà tôi đã chạy cho đến khi tôi đọc bài đăng của bạn. Cảm ơn!
Spike

Làm cách nào bạn có thể tiếp cận máy phát triển của mình từ 10.0.2.2? Tôi đã thử ping nhưng không có gì, pic ở đây . Ifconfig -app ở bên phải và terminal-emulator ở bên trái đang cố gắng ping dev-machine. Không thể thấy bất kỳ thứ gì trong localhost, bất kỳ bài kiểm tra đơn giản nào?
hhh

@hhh Bạn có thể thử JuiceSSH: play.google.com/store/apps/details?id=com.sonelli.juicessh Bạn có thể liên hệ với máy chủ của mình từ IP được đề cập hoặc từ IP thực của máy chủ. Cả hai biến thể đều phù hợp với tôi.
Muhamed Huseinbašić

Tôi tin rằng lưu lượng truy cập từ trình giả lập được định tuyến qua bộ định tuyến "ảo" trước (với địa chỉ IP 10.0.2.1, không phải trực tiếp. Vì vậy, sẽ có một kết nối bổ sung diễn ra giữa bộ định tuyến này 10.0.2.1với máy chủ / nhà phát triển 127.0.0.1/10.0.2.2. Điều tôi thực sự thường thay đổi số cổng tôi muốn kết nối.
stdout

36

Nếu bạn thực sự muốn IP được gán cho trình mô phỏng của mình:

adb shell
ifconfig eth0

Điều này sẽ cung cấp cho bạn một cái gì đó như:

eth0: ip 10.0.2.15 mask 255.255.255.0 flags [up broadcast running multicast]

Luise nói: Tôi đã thử phương pháp Derek. nó có thể ping trong adb shell .
Tobi Nary

6
Tôi nhận được lỗi này sau adb shell: ifconfig: eth0: No such devicebất kỳ ý tưởng tại sao?
awavi

3
@awavi nó có thể là dưới một giao diện khác nhau nhưwlan0
William Reed

26

Như thế này:

public String getLocalIpAddress() {
    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();
                if (!inetAddress.isLoopbackAddress()) {
                    return inetAddress.getHostAddress().toString();
                }
            }
        }
    } catch (SocketException ex) {
        Log.e(LOG_TAG, ex.toString());
    }
    return null;
}

Kiểm tra tài liệu để biết thêm thông tin: NetworkInterface .


5
Và đừng quên quyền 'android.permission.INTERNET'
Stéphane

2
Điều này cung cấp địa chỉ IP6, làm thế nào để lấy IP4?
Akash Kava

19

Sử dụng phương pháp này, bạn sẽ nhận được địa chỉ ip chính xác 100% cho trình giả lập Android của mình

Để lấy địa chỉ ip của trình giả lập yoor

Vào adb shell và gõ lệnh này

adb shell
ifconfig eth0

nhập mô tả hình ảnh ở đây

Sau khi chạy lệnh này, tôi nhận được

IP: 10.0.2.15

Mặt nạ: 255.255.255.0

Cái nào phù hợp với tôi. Tôi cũng đang làm việc cho một ứng dụng mạng.


10

Nếu bạn cần tham chiếu đến máy chủ cục bộ của máy tính chủ của mình, chẳng hạn như khi bạn muốn máy khách giả lập liên hệ với máy chủ đang chạy trên cùng máy chủ, hãy sử dụng bí danh 10.0.2.2 để tham chiếu đến giao diện lặp lại của máy tính chủ. Từ quan điểm của trình giả lập, localhost (127.0.0.1) đề cập đến giao diện loopback của riêng nó. Chi tiết thêm: http://developer.android.com/guide/faq/commontasks.html#localhostalias


3
public String getLocalIpAddress() {

    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();
                if (!inetAddress.isLoopbackAddress()) {
                    return inetAddress.getHostAddress().toString();
                }
            }
        }
    } catch (SocketException ex) {
        Log.e(LOG_TAG, ex.toString());
    }
    return null;
}

0

Trong mã ứng dụng của mình, tôi có thể lấy IP thiết bị đang chạy và địa chỉ dễ dàng như beolow:

WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.