Lệnh Windows trả về IP bên ngoài


Câu trả lời:


14

Không có lệnh tích hợp để làm điều này. Một phần của vấn đề là khi bạn được kết nối với internet thông qua bộ định tuyến, phần cứng mạng của bạn không được kết nối trực tiếp với internet, do đó hệ thống của bạn không được gán IP cụ thể. Có thể bạn thậm chí có thể có nhiều IP bên ngoài trong một số trường hợp nếu bạn đứng sau một proxy ngược, vì nhiều mạng công ty được thiết lập. Đặt cược tốt nhất của bạn có thể là tạo một tập lệnh truy vấn whatismyip.org hoặc cố gắng tìm nếu nó đã tồn tại.

(Như một mẹo, whatismyip.org thích hợp hơn hầu hết các giải pháp khác, vì nó chỉ trả về IP của bạn dưới dạng văn bản thuần túy - không có văn bản thừa, liên kết, hình ảnh hoặc rác khác. Nó sẽ dễ sử dụng hơn trong một tập lệnh tùy chỉnh so với hầu hết các trang web phát hiện IP khác.)


6
Họ đã thay đổi whatismyip.org, thật không may; địa chỉ IP hiện được trả về dưới dạng hình ảnh , khiến nó trở nên vô dụng đối với kịch bản. Trang web "icanhazip.com" được đề cập dưới đây không hoạt động.
onnodb

Yandex đang hoạt động, kiểm tra tập lệnh được đăng dưới đây.
Filipe YaBa Polido

Lệnh gốc hoạt động từ bên dưới superuser.com/a/722397/216374
PsychoData

107

Bạn có thể sử dụng yêu cầu DNS thay vì yêu cầu HTTP để tìm ra IP công khai của mình:

C:\> nslookup myip.opendns.com. resolver1.opendns.com

Nó sử dụng resolver1.opendns.commáy chủ dns để phân giải myip.opendns.com.tên máy chủ ma thuật đến địa chỉ IP của bạn . (Lưu ý: việc theo dõi .trên tra cứu sẽ ngăn các miền tìm kiếm được thêm vào, điều này có thể mang lại kết quả không chính xác.)

Phiên bản Unix:

$ dig +short myip.opendns.com @resolver1.opendns.com

1
Làm việc như người ở.
BK

rực rỡ, hoạt động mà không cần cài đặt bất cứ điều gì quá.
ericosg

Không làm việc cho tôi nữa vào tháng 11 năm 2017, trên Windows 10. Câu trả lời PowerShell từ Bradley Forney hoạt động.
Jason

Làm việc cho tôi vẫn còn (Windows 10, tháng 12 năm 2017). Rất thông minh @jfs, OpenDNS có tài liệu này ở đâu đó làm thế nào bạn phát hiện ra nó?
Alex KeySmith

4
Đây phải là câu trả lời được chấp nhận, vì nó cung cấp một lệnh thực tế và nó hoạt động. Câu trả lời được chấp nhận cho biết không có lệnh (được chứng minh là sai) và đề nghị sử dụng tập lệnh mà không thực sự đưa ra hướng tiếp theo.
CyberClaw

30

lấy bản sao của riêng bạn curltừ http://curl.haxx.se/doad.html và sau đó chỉ

curl "http://myexternalip.com/raw"

hoặc sử dụng powershell:

$wc = new-object System.Net.WebClient
$wc.DownloadString("http://myexternalip.com/raw")

(từ chối trách nhiệm: http://myexternalip.com được tạo bởi tôi)


Điều đó chỉ cung cấp một địa chỉ IPv6. Có cách nào để lấy địa chỉ IPv4 không?
tim11g

Tôi tiếp tục đọc và tìm thấy các ví dụ IPv4 / IPv6 bên dưới cho Powershell. Có thể nhận được IPv4 với CURL như thế này "C:> curl" myip.dnsomatic.com "
tim11g

7

Điều này hoạt động độc đáo, tôi sử dụng nó chủ yếu với psexec khi kiểm tra các kết nối máy tính của khách hàng.

nslookup myip.opendns.com resolver1.opendns.com

6

Tạo một tệp có tên ip.vbsvà sao chép sau đây vào nó:

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

Thực thi bằng

C:\>cscript ip.vbs

Như đã lưu ý , tốt nhất là chọn một trang web chỉ trả về IP và không phải quảng cáo HTML +, v.v. như:

(nguồn: trước đây là http://externip.com/about )


5

Tôi đã tạo tập lệnh bó này để làm điều đó một vài tháng trước:

@echo off

:: WhatIsMyIP.cmd - returns public IP address
:: requires: wget.exe

if [%1]==[-h] goto :HELP
if [%1]==[--help] goto :HELP
if [%1]==[/?] goto :HELP

wget -q -O %temp%\MyIP http://www.whatismyip.com/automation/n09230945.asp
for /f "delims= " %%G in (%temp%\myip) do set PublicIP=%%G & del %temp%\MyIP
echo. & echo Your public IP address is %PublicIP% & echo.
if [%1]==[--clip] echo %PublicIP% | clip
goto :EOF

:HELP
echo. & echo Usage: whatismyip [--clip] & echo.
goto :EOF

:EOF

Nó cung cấp cho bạn tùy chọn để đặt địa chỉ IP vào bảng tạm và nó đặt biến môi trường - %PublicIP%.


PHƯƠNG PHÁP SIMPLER:

Bây giờ, tôi chỉ làm điều này thay thế:

curl icanhazip.com

hoặc là...

curl icanhazip.com | clip

... Để lấy địa chỉ IP công cộng hiện tại vào bảng tạm.

Bạn cần cURL .


1
Kịch bản từ paradroid hoạt động tốt nhưng whatsmyip đã chuyển trang web sang tự động hóa.whatismyip.com / n09230945.asp Nếu bạn thay đổi điều này, nó hoạt động hoàn hảo.

5

Với Powershell 3.0 (mặc định của Windows 7 là 2.0), bạn có thể sử dụng Invoke-WebRequest

Đối với IPv4:

$tmp =Invoke-WebRequest -URI http://myip.dnsomatic.com/
$tmp.Content

Đối với IPv6:

$tmp =Invoke-WebRequest -URI http://myexternalip.com/raw
$tmp.Content

Điều này sẽ cung cấp cho bạn một biến để làm việc nếu bạn có một cái gì đó cụ thể mà bạn muốn làm với nó. Tôi thực sự đang sử dụng điều này để xây dựng tập lệnh để tải lên IP động của bộ định tuyến của mình theo định kỳ, có một giao tiếp kiểm tra máy khác với nó theo định kỳ và sau đó cập nhật DNS với IP mới nhất nếu nó đã thay đổi để tôi có thể truy cập thiết bị của mình từ bất cứ đâu bằng cách sử dụng tên thay vì phải liên tục đuổi theo IP.

Và tất nhiên - khi các trang web thay đổi hoặc đầu ra của chúng thay đổi, bạn sẽ muốn cập nhật điều này cho phù hợp. :)


Cách tiếp cận này rất hiệu quả đối với tôi trên windows 10. Tôi cần một lệnh một dòng, vì vậy đã chạy phần trên trong dấu ngoặc kép sau powershell.exe -noprofile -command "". Phân tách ngắt dòng bằng dấu chấm phẩy ...
Jason

1
Lót? Chỉ cần chạy(Invoke-WebRequest -URI http://myip.dnsomatic.com).Content
merosss

3

Hãy thử điều này:
Không cần bất kỳ loại phần mềm bên ngoài nào được cài đặt.

@set @script=0 /*
  @echo off
    set @script=
    cscript //nologo //e:jscript "%~dpnx0"
  exit /b
*/

with (new ActiveXObject('Microsoft.XMLHTTP')) {
   open('GET', 'http://internet.yandex.ru/', false);
   send();

   WScript.echo(responseText.match(/IPv4:\s(\d+\.){3}\d+/g));
}

3

Không có chương trình của bên thứ ba khó với Windows vì Telnet không được cung cấp theo mặc định, nhưng, nếu có (XP) hoặc bật (Windows Vista trở lên), chỉ cần gõ:

telnet curlmyip.com 80

màn hình sẽ nhấp nháy và bạn sẽ chỉ nhận được một con trỏ ... Loại tiếp theo:

GET

Trong chữ in hoa ... sau đó bạn sẽ thấy các tiêu đề, theo sau là ip của bạn (và xin lỗi tôi đã làm mờ nó, chỉ hiển thị vị trí của nó!):

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

Các câu trả lời khác ở đây rõ ràng có tác dụng, nhưng, tôi đang cố gắng giữ câu hỏi về thứ gì đó có thể được sử dụng trên bất kỳ cửa sổ nào, mà không có chương trình của bên thứ ba!

Đối với Windows Vista trở lên, bạn có thể cài đặt telnet dễ dàng (và an toàn) thông qua Programs and featureshoặc sử dụng lệnh sau:

pkgmgr /iu:”TelnetClient”

Điều đó (và hầu hết các câu trả lời!) Không cho rằng trang web nguồn chọn địa chỉ IP của bạn một cách chính xác - một số loại proxy làm rối tung điều này. Tôi đã loại bỏ địa chỉ IP của tôi ra khỏi bộ định tuyến của tôi vì điều này. Thật thú vị, trong những trường hợp này, một trang web sử dụng cổng không chuẩn có thể hoạt động tốt.
Journeyman Geek

Không làm việc với curlmyip.com, nhưng thử nghiệm làm việc với checkip.dyndns.org.
Sopalajo de Arrierez

2

Bạn có thể sử dụng ifcfg.me . Nó hỗ trợ một số lệnh nội bộ đi kèm với windows theo mặc định.

curl ifcfg.me
nslookup . ifcfg.me
telnet ifcfg.me
ftp ifcfg.me
finger @ifcfg.me

1

Tôi muốn có một giải pháp hoạt động cho Windows mà không cần cài đặt các công cụ của bên thứ ba. Vì vậy, tôi đã chọn tùy chọn powershell , sẽ chạy một kịch bản mỗi giờ.

Bạn tạo tập lệnh này bằng Notepad

$wc = new-object System.Net.WebClient
$ip = $wc.DownloadString("http://myexternalip.com/raw")
$LogTime = Get-Date -Format "MM-dd-yyyy_hh-mm-ss"
Add-Content C:\Users\Administrator\Desktop\logs\IPLog.txt $LogTime
Add-Content C:\Users\Administrator\Desktop\logs\IPLog.txt "`n"
Add-Content C:\Users\Administrator\Desktop\logs\IPLog.txt $ip
Add-Content C:\Users\Administrator\Desktop\logs\IPLog.txt "`n"

và lưu nó như getIP.ps1một nơi nào đó. Bạn có thể gọi kịch bản này trực tiếp trong powershell hoặc sử dụng trình hoạch định tác vụ như tôi đã làm. Đây là lệnh để thực thi:

powershell -executionpolicy bypass -File C:\Users\Administrator\Desktop\getIP.ps1

Trong lịch trình tác vụ bạn tạo ra một nhiệm vụ mới. Tại Kích hoạt, bạn sử dụng cài đặt hàng ngày cho mỗi 1 ngày và trong tùy chọn nâng cao, bạn chọn mỗi giờ trong thời gian ngay lập tức . Đồng thời kiểm tra tác vụ Run càng sớm càng tốt sau khi bắt đầu theo lịch trình bị bỏ lỡ trong Cài đặt . Trong phần Hành động, bạn dán mã thực thi ở trên.

Mã powershell có thể được tối ưu hóa, bởi vì tôi không có guru powershell (lần đầu tiên tôi sử dụng nó). Bây giờ tôi đang kiểm tra nếu tập lệnh được gọi mỗi giờ.


1

Đây là những gì tôi đã tìm ra, có thể sử dụng lệnh dựng sẵn để lấy địa chỉ IP công cộng nhưng bạn có quyền truy cập vào internet

telnet icanhazip.com

hoặc là

telnet myip.gelma.net

Nắm bắt tốt! Mặc dù icanhazip.comtôi sẽ không làm việc cho tôi và người khác không làm IPv6 đúng cách. :)
Daniel B

0

ipchicken.com sẽ trả về địa chỉ IP rõ ràng của bạn ở định dạng văn bản nếu bạn có thể phân tích cú pháp HTML trả về mà bạn trích xuất IP bên ngoài của bộ định tuyến. Thay phiên, bạn có thể cài đặt một trong những tác nhân DNS động cập nhật IP bên ngoài rõ ràng của bạn thành FQDN và sau đó chỉ cần nslookup trên FQDN của bạn để xem số IP hiện tại của bạn. Đã từng có những cái miễn phí như DynDNS nhưng hầu hết chúng hiện nay đều yêu cầu tài khoản đăng ký trả phí.

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.