黑客笔记53:如何一键确认互联网出口IP?

491 阅读2分钟

攻陷一台内网主机,想要确认它是否可以联网以及相应的出口IP,可以访问特定的网站。myip.ipip.net

如果是一台linux的机器,一般可以运行shell和python3

chukouip.sh

#!/bin/bash

ip=$(curl -s http://myip.ipip.net)
echo "My public IP address is: $ip"

chukouip.py

import requests

def get_public_ip():
    try:
        response = requests.get('http://myip.ipip.net', timeout=5)
        if response.status_code == 200:
            return response.text.strip()
        else:
            return "Error: Unable to fetch IP address."
    except requests.exceptions.RequestException as e:
        return f"Error: {e}"

public_ip = get_public_ip()
print(f"My public IP address is: {public_ip}")

导入 requests 库:用于发送 HTTP 请求。

定义 get_public_ip 函数:用于获取公共 IP 地址。

使用 requests.get 方法发送 GET 请求到 myip.ipip.net

检查响应的状态码是否为 200,如果是,则返回文本内容。

如果状态码不是 200 或者发生异常,返回错误消息。

调用函数并打印结果:调用 get_public_ip 函数并将结果打印出来。

如果拿下的是一台windows机器,可以使用powershell或者bat脚本。

chukouip.ps1

$ip = Invoke-RestMethod -Uri 'http://myip.ipip.net' -UseBasicParsing
Write-Host "My public IP address is: $ip"

Invoke-RestMethod 命令:用于发送 HTTP 请求并接收响应。

-Uri 参数指定了要请求的 URL。

-UseBasicParsing 参数用于避免 PowerShell 自动转换 JSON 输出,这对于简单的文本响应非常有用。

Write-Host 命令:用于输出结果到控制台。

chukouip.bat,适用于windows server 2003的场景

@echo off
setlocal enabledelayedexpansion

:: 设置命令提示符为 UTF-8 编码
chcp 65001 >nul

:: 获取公共 IP 地址
for /f "usebackq tokens=* delims=" %%a in (`curl -s http://myip.ipip.net`) do (
    set ip=%%a
)

:: 显示公共 IP 地址
echo My public IP address is: !ip!

endlocal

@echo off:关闭命令回显,使得脚本运行时不显示命令本身。

setlocal enabledelayedexpansion:启用延迟变量扩展,以便在循环中正确使用变量。

命令提示符的代码页设置为 65001,即 UTF-8 编码。

for /f 循环:使用 curl 命令获取 IP 地址,并通过 for /f 循环读取输出。

usebackq 表示使用反引号来引用命令,而不是双引号。

tokens=* 表示获取整个行作为单一的令牌。

delims= 表示不使用任何分隔符。

set ip=%%a:将获取到的 IP 地址赋值给变量 ip。

echo My public IP address is: !ip!:输出公共 IP 地址。这里使用 !ip! 而不是 %ip%,是因为我们启用了延迟变量扩展。

endlocal:结束局部变量环境。

看来powershell和shell的优势还挺大,就说真的是简洁。

nstool.netease.com/ ,这个网站也可以访问之后知道自己的出口IP多少。