2008-08-29 28 views
24

Tôi muốn truy xuất địa chỉ ethernet của giao diện mạng được sử dụng để truy cập một trang web cụ thể.Làm thế nào để bạn nhận được địa chỉ ethernet bằng Java?

Làm cách nào để thực hiện điều này trong Java?

Giải pháp Lưu ý rằng giải pháp được chấp nhận của getHardwareAddress chỉ có sẵn trong Java 6. Có vẻ như không phải là một giải pháp cho Java 5 ngoài việc thực hiện i (f | p) confing.

Trả lời

17

java.net.NetworkInterface.getHardwareAddress (phương pháp bổ sung trong Java 6)

Nó phải được gọi trên máy bạn đang quan tâm - MAC không được chuyển qua các biên giới mạng (ví dụ mạng LAN và WAN). Nếu bạn muốn sử dụng nó trên một máy chủ trang web để thẩm vấn các khách hàng, bạn sẽ phải chạy một applet mà sẽ báo cáo kết quả lại cho bạn.

Đối với Java 5 trở lên, tôi tìm thấy mã parsing output of command line tools on various systems.

+0

Tôi nghĩ rằng chính xác hơn so * "qua các biên giới mạng" * là * "qua phân đoạn mạng "* – m0skit0

3

Bạn có thể lấy địa chỉ kết nối với ServerSocket bạn sử dụng http://java.sun.com/javase/6/docs/api/java/net/NetworkInterface.html#getInetAddresses()

Tuy nhiên, nếu khách hàng của bạn đang kết nối thông qua một NAT, sau đó bạn sẽ nhận được địa chỉ của router và KHÔNG địa chỉ Ethernet. Nếu nó nằm trong mạng cục bộ của bạn (thông qua một hub/switch, không có router với NAT) thì nó sẽ hoạt động như dự định.

2

Thực ra, ngoài các câu trả lời đúng khác (JDK 6; exec 'ifconfig'), có các thư viện dựa trên JNI. Java Uuid Generator (JUG) 2.0 có mã cho một số nền tảng. Này hoạt động trên JDK 1.2 trở lên ít nhất (có thể 1.1 chẵn)

Các vấn đề liên quan