มีคำสั่งที่ฉันสามารถค้นหา IP ภายนอกของเราเตอร์ของฉันหรือ NAT \ DSL เราเตอร์ของฉัน ฯลฯ ไม่จำเป็นต้องไปที่ whatsmyip.net หรือที่คล้ายกัน
มีคำสั่งที่ฉันสามารถค้นหา IP ภายนอกของเราเตอร์ของฉันหรือ NAT \ DSL เราเตอร์ของฉัน ฯลฯ ไม่จำเป็นต้องไปที่ whatsmyip.net หรือที่คล้ายกัน
คำตอบ:
ไม่มีคำสั่งในตัวให้ทำเช่นนี้ ส่วนหนึ่งของปัญหาคือเมื่อคุณเชื่อมต่ออินเทอร์เน็ตผ่านเราเตอร์ฮาร์ดแวร์เครือข่ายของคุณไม่ได้เชื่อมต่อโดยตรงกับอินเทอร์เน็ตดังนั้นระบบของคุณไม่ได้กำหนด IP โดยเฉพาะ อาจเป็นไปได้ที่คุณอาจมี IP ภายนอกหลายตัวในบางกรณีหากคุณอยู่หลังพร็อกซีย้อนกลับเนื่องจากมีการตั้งค่าเครือข่ายขององค์กรจำนวนมาก ทางออกที่ดีที่สุดของคุณอาจจะสร้างสคริปต์ที่ค้นหาwhatismyip.orgหรือพยายามค้นหาหากมีอยู่แล้ว
whatismyip.org นั้นดีกว่าโซลูชันอื่น ๆ ส่วนใหญ่เนื่องจากมันเพิ่งส่งคืน IP ของคุณเป็นข้อความธรรมดา - ไม่มีข้อความฟุ่มเฟือยลิงค์รูปภาพหรือขยะอื่น ๆ มันจะง่ายกว่าที่จะใช้ในสคริปต์ที่กำหนดเองมากกว่าส่วนใหญ่ของ ไซต์ตรวจจับ IP อื่น ๆ )
คุณสามารถใช้คำขอ DNS แทนคำขอ HTTP เพื่อค้นหา IP สาธารณะของคุณ:
C:\> nslookup myip.opendns.com. resolver1.opendns.com
จะใช้resolver1.opendns.com
เซิร์ฟเวอร์ DNS เพื่อแก้ไขmyip.opendns.com.
ชื่อโฮสต์ขลังไปยังที่อยู่ IP ของคุณ (หมายเหตุ: การติดตามส่วนท้าย.
ในการค้นหาป้องกันไม่ให้โดเมนการค้นหาต่อท้ายซึ่งสามารถให้ผลลัพธ์ที่ไม่ถูกต้อง)
รุ่น Unix:
$ dig +short myip.opendns.com @resolver1.opendns.com
คว้าสำเนาของคุณเองcurl
จากhttp://curl.haxx.se/download.htmlจากนั้นเพียงแค่
curl "http://myexternalip.com/raw"
หรือใช้ PowerShell:
$wc = new-object System.Net.WebClient
$wc.DownloadString("http://myexternalip.com/raw")
(ข้อจำกัดความรับผิดชอบ: http://myexternalip.comถูกสร้างโดยฉัน)
มันใช้งานได้ดีฉันใช้มันเป็นส่วนใหญ่กับ psexec เมื่อตรวจสอบการเชื่อมต่อคอมพิวเตอร์ไคลเอนต์
nslookup myip.opendns.com resolver1.opendns.com
สร้างชื่อไฟล์ip.vbs
และคัดลอกสิ่งต่อไปนี้ลงไป:
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
ดำเนินการโดยใช้
C:\>cscript ip.vbs
ดังที่ระบุไว้ว่าเมิร์จ, เป็นการดีที่สุดที่จะเลือกเว็บไซต์ที่แสดง IP และไม่ใช่โฆษณาแบบ HTML +, เป็นต้นเช่น:
(ที่มา: http://externip.com/aboutเดิม)
ฉันสร้างสคริปต์ชุดงานนี้ขึ้นเมื่อสองสามเดือนที่ผ่านมา
@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
มันทำให้คุณมีตัวเลือกที่จะใส่ที่อยู่ IP ในคลิปบอร์ดและจะกำหนดตัวแปรสิ่งแวดล้อม %PublicIP%
-
วิธีการอย่างง่าย:
ตอนนี้ฉันเพิ่งทำสิ่งนี้แทน:
curl icanhazip.com
หรือ...
curl icanhazip.com | clip
... เพื่อรับที่อยู่ IP สาธารณะปัจจุบันลงในคลิปบอร์ด
ด้วย Powershell 3.0 (ค่าเริ่มต้นของ Windows 7 คือ 2.0) คุณสามารถใช้ Invoke-WebRequest
สำหรับ IPv4:
$tmp =Invoke-WebRequest -URI http://myip.dnsomatic.com/
$tmp.Content
สำหรับ IPv6:
$tmp =Invoke-WebRequest -URI http://myexternalip.com/raw
$tmp.Content
สิ่งนี้จะให้ตัวแปรแก่คุณในการทำงานหากคุณมีบางอย่างที่คุณต้องการทำกับมัน ฉันใช้สิ่งนี้เพื่อสร้างสคริปต์เพื่ออัปโหลดไดนามิก IP ของเราเตอร์เป็นระยะ ๆ มีการทดสอบการสื่อสารด้วยเครื่องอื่นเป็นระยะ ๆ จากนั้นอัปเดต DNS ด้วย IP ล่าสุดหากมีการเปลี่ยนแปลงเพื่อให้ฉันสามารถเข้าถึงอุปกรณ์ของฉันได้จากทุกที่ ใช้ชื่อแทนที่จะต้องไล่ IP อย่างต่อเนื่อง
และแน่นอน - เมื่อไซต์เปลี่ยนไปหรือเปลี่ยนแปลงผลลัพธ์คุณจะต้องอัปเดตสิ่งนี้ตามลำดับ :)
powershell.exe -noprofile -command ""
ผมจำเป็นต้องมีคำสั่งหนึ่งบรรทัดเพื่อให้วิ่งไปข้างต้นในเครื่องหมายคำพูดหลัง แยกการขึ้นบรรทัดใหม่ด้วยเซมิโคลอน ...
(Invoke-WebRequest -URI http://myip.dnsomatic.com).Content
ลองสิ่งนี้:
ไม่จำเป็นต้องติดตั้งซอฟต์แวร์ภายนอกใด ๆ
@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));
}
หากไม่มีโปรแกรมของบุคคลที่สามจะใช้งาน Windows ได้ยากเนื่องจาก Telnet ไม่ได้ให้บริการตามค่าเริ่มต้น แต่หากมี (XP) หรือเปิดใช้งาน (Windows Vista ขึ้นไป) เพียงพิมพ์:
telnet curlmyip.com 80
หน้าจอจะกะพริบและคุณจะได้รับเคอร์เซอร์ ... ประเภทถัดไป:
GET
ในตัวอักษรพิมพ์ใหญ่ ... จากนั้นคุณจะเห็นส่วนหัวตามด้วย ip ของคุณ (และขอโทษที่ฉันเบลอเพียงแสดงว่ามันจะอยู่ที่ไหน!):
คำตอบอื่น ๆ ที่นี่เห็นได้ชัดว่าทำงานได้ แต่ฉันพยายามเก็บคำถามเกี่ยวกับสิ่งที่สามารถใช้กับหน้าต่างใด ๆ โดยไม่ต้องใช้โปรแกรมของบุคคลที่สาม!
สำหรับ Windows Vista ขึ้นไปคุณสามารถติดตั้ง telnet ได้อย่างง่ายดาย (และปลอดภัย) ผ่านPrograms and features
หรือใช้คำสั่งต่อไปนี้:
pkgmgr /iu:”TelnetClient”
curlmyip.com
checkip.dyndns.org
ฉันต้องการโซลูชันที่ใช้งานได้กับWindowsโดยไม่ต้องติดตั้งเครื่องมือของบุคคลที่สาม ดังนั้นฉันจึงใช้ตัวเลือกpowershellซึ่งควรเรียกใช้สคริปต์ทุกชั่วโมง
คุณสร้างสคริปต์นี้ด้วย 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"
และบันทึกเป็นที่getIP.ps1
ใดที่หนึ่ง คุณสามารถเรียกสคริปต์นี้ได้โดยตรงใน PowerShell หรือใช้ตัววางแผนงานอย่างที่ฉันทำ นี่คือคำสั่งสำหรับการดำเนินการ:
powershell -executionpolicy bypass -File C:\Users\Administrator\Desktop\getIP.ps1
ในตัวกำหนดตารางเวลางานคุณสร้างงานใหม่ ที่ทริกเกอร์ที่คุณใช้การตั้งค่า รายวันสำหรับทุก 1 วันและอยู่ภายใต้ตัวเลือกขั้นสูงที่คุณเลือกทุกชั่วโมงสำหรับระยะเวลาของทันที นอกจากนี้ตรวจสอบงานที่เรียกใช้โดยเร็วที่สุดหลังจากที่มีการเริ่มต้นที่กำหนดจะพลาดในการตั้งค่า ภายใต้การกระทำคุณวางรหัสการกระทำข้างต้น
รหัส powershell สามารถปรับให้เหมาะสมเพราะฉันไม่มีกูรู powerhell (ครั้งแรกของฉันกับมัน) ตอนนี้ฉันกำลังทดสอบว่าสคริปต์ถูกเรียกใช้ทุกชั่วโมงหรือไม่
นี่คือสิ่งที่ฉันค้นพบมันเป็นไปได้ที่จะใช้คำสั่งในตัวเพื่อรับที่อยู่ IP สาธารณะ แต่คุณมีการเข้าถึงอินเทอร์เน็ต
telnet icanhazip.com
หรือ
telnet myip.gelma.net
icanhazip.com
จะไม่ได้ผลสำหรับฉันและอีกอันหนึ่งทำงานได้ไม่ถูกต้อง :)
ipchicken.com จะส่งคืนที่อยู่ IP ของคุณในรูปแบบข้อความหากคุณสามารถแยกวิเคราะห์ HTML ที่ส่งคืนซึ่งคุณแยก IP ภายนอกของเราเตอร์ของคุณ อีกวิธีหนึ่งคุณสามารถติดตั้งหนึ่งในตัวแทน DNS แบบไดนามิกเหล่านั้นที่อัปเดต IP ภายนอกของคุณให้เป็น FQDN จากนั้นเพียงแค่ทำ nslookup บน FQDN ของคุณเพื่อดูหมายเลข IP ปัจจุบันของคุณ เคยมีคนฟรีเช่น DynDNS แต่ตอนนี้ส่วนใหญ่ต้องมีบัญชีสมาชิกแบบชำระเงิน