Làm cách nào để lấy địa chỉ IP bên ngoài của tôi (trên NAT) từ dòng lệnh Windows? [bản sao]


13

Lệnh "ipconfig" của Windows chỉ có thể hiển thị cho tôi các tham số từ giao diện Ethernet từ máy của tôi (ngay cả với ipconfig /allđối số). Nó có thể hiển thị thông tin chi tiết về giao diện, nhưng nó sẽ không bao giờ hiển thị cho tôi địa chỉ IP bên ngoài của tôi qua mạng NAT .

ipconfig / all - Ảnh chụp màn hình Windows

Tuy nhiên, có một số trang web, chẳng hạn như "Địa chỉ IP của tôi là gì" có thể nhận và hiển thị địa chỉ IP bên ngoài của tôi. Vì vậy, tôi tự hỏi, liệu có thể có được giá trị này bên ngoài? Tôi có nên hy vọng rằng có một số cách để có được thông tin này từ một dòng lệnh tại máy cục bộ của tôi ...

Tôi cần lấy giá trị này để đăng nhập vào một ứng dụng mà tôi đang làm với VBScript . Có cách nào để làm điều này, từ một cmdtrên Windows?


Lưu ý rằng các dịch vụ IP dựa trên HTTP có thể cung cấp cho bạn IP của máy chủ proxy. (Và trước khi điểm bất cứ ai ra rằng HTTPS proxy tồn tại, bạn có thể không minh bạch Proxy HTTPS Nếu bạn đã có một, bạn sẽ biết điều đó..)
billpg

Câu trả lời:


11

Bây giờ, bằng cách sử dụng trang Oliver cung cấp, điều này có thể được thực hiện trong VBScript.

Dim o
Set o = CreateObject("MSXML2.XMLHTTP")
o.open "GET", "http://ifconfig.me/ip", False
o.send
WScript.StdOut.Write o.responseText

Có một phương pháp tương tự cho PowerShell.


Đẹp, nó đã làm việc. Tôi sẽ chèn nó vào chương trình của tôi. Đó là một giải pháp tốt cho vấn đề của tôi. Cảm ơn bạn.
Diogo

Hmm, nó đang trả lại "Acess bị từ chối" trên dòng 4, ký tự 1 cho kịch bản này. Ngay cả khi chạy nó từ một dòng lệnh quyền quản trị viên ... Bạn có biết tại sao không?
Diogo

@DiogoRocha Tôi không biết tại sao. Một trong những Fiasco có lẽ đáng tin cậy hơn. Cũng có thể bạn có tường lửa hoặc thứ gì đó chặn truy cập internet vào wscript/ cscript.
Bob

10

Vấn đề là, đó không phải là địa chỉ IP của bạn. Đó là địa chỉ IP của bộ định tuyến của bạn.

Vì vậy, bạn sẽ không bao giờ có thể lấy nó mà không thông qua bộ định tuyến của bạn. Và cách dễ nhất là chỉ cần làm cho bộ định tuyến lấy một trang web cho bạn (như bạn đã nhận thấy). Bởi vì bộ định tuyến sẽ sử dụng địa chỉ IP của nó để lấy trang web đó.

Điều đó đang được nói, bạn có thể làm cho nó dễ dàng bằng cách sử dụng ifconfig.me/ip . Bây giờ, nếu bạn có curl, bạn đã hoàn thành, nếu không: Wget / cURL thay thế cho Windows?


1
ifconfig.me/ip mất nhiều thời gian để tải. whatismyip.org cung cấp cho bạn một IP văn bản đơn giản giống hệt nhau và nhanh hơn rất nhiều.
nheo

1
@nhinkle Điều đó có thể phụ thuộc vào vị trí của bạn, mặc dù. Cả hai dường như có cùng thời gian tải đối với tôi, nhưng thời gian phản hồi ping từ ifconfig.me là một nửa (139ms so với 250ms). Điều có lẽ quan trọng hơn là dịch vụ này duy trì càng lâu càng tốt, nhưng chúng tôi thực sự không có cách nào để biết.
Bob

Không có gì sai với địa chỉ IP bên ngoài của bộ định tuyến của tôi khi xem xét các quy tắc chuyển tiếp cổng và IPv4.
mbx

5

Tạo một kịch bản VB để chạy lúc rảnh rỗi.

Nhập tệp này vào tệp txt:

Option Explicit
Dim http : Set http = CreateObject( "MSXML2.ServerXmlHttp" )
http.Open "GET", "http://icanhazip.com", False
http.Send
Wscript.Echo http.responseText   'or do whatever you want with it
Set http = Nothing

Đóng tệp txt và đổi tên thành ip.vbs (lưu nó vào C: cho ví dụ này)

Trong các cửa sổ mở một cửa sổ dos (chạy cmd) ( ha! Tôi chỉ nhận ra nếu bạn trao đổi rằng nó sẽ chạy dmc !! )

Đảm bảo bạn đang ở c: / (nếu không, nhập c: & nhấn enter, sau đó cd .. & nhập một vài lần cho đến khi bạn thấy C:>)

Tại loại nhắc nhở dos:

cscript ip.vbs

và bạn sẽ thấy ngay IP bên ngoài của mình.

Nếu bạn đặt tệp vbs vào khóa usb hoặc một cái gì đó (và nhớ chạy cscript ip.vbs tại dấu nhắc dos - nhưng hãy chắc chắn rằng bạn đang ở trong cùng thư mục với tệp ip.vbs), bạn có thể mang theo bên mình bất cứ nơi nào bạn đến và chạy tệp .vbs trên bất kỳ máy tính nào để xem IP bên ngoài của chúng.

Một lưu ý khác, dòng có địa chỉ cho icanhazip.com có ​​thể được thay đổi thành bất kỳ điều nào sau đây:

http://myip.dnsomatic.com
http://whatismyip.org
http://icanhazip.com
http://www.whatismyip.com/automation/n09230945.asp
http://externip.com

Chỉnh sửa, bạn cũng có thể chạy tệp ip.vbs trong cửa sổ mà không cần đến cửa sổ dos và nó sẽ chỉ hiển thị trong một cửa sổ bật lên nhỏ.


icanhazip.com có thời gian phản hồi rất ngắn tốt hơn ipconfig.me/ip tại trung tâm châu Âu.
Martin Braun


3

Để có được địa chỉ IP bên ngoài, bạn cần hỏi một cái gì đó bên ngoài mạng và yêu cầu nó báo cáo lại địa chỉ IP của bạn "xuất hiện" ở đâu. Điều này có thể được thực hiện thông qua kịch bản bằng cách truy vấn một trang dễ phân tích kết quả từ đó và lấy địa chỉ IP từ đó, nhưng không có công cụ nào được tích hợp trong Windows mà bạn có thể chỉ cho bạn biết địa chỉ IP bên ngoài của bạn là gì. Bạn sẽ cần phải tự viết hoặc tìm một bản và tải xuống.


2

Sử dụng một cái gì đó như DynDNS để gán địa chỉ IP DHCP của bạn một tên miền, sau đó bạn có thể thực hiện nslookuphoặc ping (nếu bộ định tuyến của bạn được cấu hình để phản hồi), tên miền của bạn và trích xuất địa chỉ IP từ đó.

Tiện ích Windows duy nhất khác là traceroute, nhưng nó sẽ chỉ hiển thị cổng ra mà bạn kết nối chứ không phải địa chỉ IP của bộ định tuyến đang kết nối với cổng đó.

Chỉnh sửa: Vì phải mất một chút phân tích cú pháp ở trên để trích xuất chuỗi địa chỉ IP và ifconfig.mecó phản hồi thưa thớt, đây là một chút biến thể trên tập lệnh của Bob, chức năng có thể kiểm tra không có phản hồi và trả lại IP sạch đẹp địa chỉ để sử dụng trong tập lệnh nếu máy chủ hoạt động.

wscript.echo WAN_IP()

function WAN_IP()
    set obj = createobject("Microsoft.XMLHTTP")
    call obj.open("get", "http://ifconfig.me/ip", false)
    obj.send()

    strresponse = obj.responsetext
    set obj = nothing

    if strresponse <> "" then
        strIP = strresponse
    else
        strIP = "Unavailable"
    end if

    WAN_IP = trim(strIP)

end function

1

Nếu bộ định tuyến của bạn hỗ trợ Universal plug & Play (UPnP), bạn có thể truy vấn địa chỉ IP của nó.

Trên Windows, bạn có thể truy vấn thông tin đó bằng WMI và từ dòng lệnh bằng công cụ WMIC.


2
Bạn có thể cung cấp một ví dụ? Tôi rất thích thú với điều này.
Der Hochstapler

1

Như những người khác đã nói, bạn cần phải dựa vào một dịch vụ bên ngoài. Tôi muốn giới thiệu http://www.externalip.net

Bạn có thể sử dụng http://api.externalip.net/ip để lấy ip ở định dạng văn bản thuần túy. Nó đã được chứng minh là nhanh chóng và đáng tin cậy, cộng với nó có sử dụng không giới hạn.

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.