Open angel202422 opened 3 months ago
“想要的是转发后的内网的IP”
这不是你自己设置的吗?比如说你想转发到 192.168.1.2:8000
,那手动写上去就好了。
curl加参数 -vvv
同时去掉 2>/dev/null
,看输出什么。
可以通过第三方短连接服务来跳转 natmap传递来的公网ipv4和端口号通过URL缩短器的API接口提交到短链接上,从而访问这个短链接来实现重定向到大内网web服务。 natmap利用缩短url网站重定向到大内网web natmap利用缩短url网站(gg.gg)重定向功能来访问大内网web
https://github.com/heiher/natmap/issues/81
应该可以通过下面的项目解决向客户端或对端共享/报告打洞后的出口IP地址及端口的问题 https://github.com/Violet-sword/Exchange-Variable
<?php
// 设置数据库文件路径
$dbFile = __DIR__ . '/data.db';
// 创建一个新的PDO实例连接到SQLite数据库
try {
$pdo = new PDO("sqlite:$dbFile");
// 设置错误模式为异常
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 创建表(如果不存在)
$pdo->exec("
CREATE TABLE IF NOT EXISTS key_value_store (
id TEXT PRIMARY KEY,
value TEXT
)
");
} catch (PDOException $e) {
die("数据库连接失败: " . $e->getMessage());
}
// 检查请求方法
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 处理POST请求,保存键值对
$id = isset($_POST['id']) ? $_POST['id'] : null;
$value = isset($_POST['value']) ? $_POST['value'] : null;
if ($id && $value) {
try {
// 插入或更新数据
$stmt = $pdo->prepare('INSERT OR REPLACE INTO key_value_store (id, value) VALUES (:id, :value)');
$stmt->execute([':id' => $id, ':value' => $value]);
echo "键值对 {$id}={$value} 已保存";
} catch (PDOException $e) {
echo "数据库操作失败: " . $e->getMessage();
}
} else {
echo "缺少必要的参数:id 和 value";
}
} elseif ($_SERVER['REQUEST_METHOD'] === 'GET') {
// 处理GET请求,查询键值对
$id = isset($_GET['id']) ? $_GET['id'] : null;
if ($id) {
try {
$stmt = $pdo->prepare('SELECT value FROM key_value_store WHERE id = :id');
$stmt->execute([':id' => $id]);
$result = $stmt->fetch(PDO::FETCH_ASSOC);
if ($result) {
echo $result['value'];
} else {
echo "未找到ID {$id}";
}
} catch (PDOException $e) {
echo "数据库操作失败: " . $e->getMessage();
}
} else {
echo "缺少必要的参数:id";
}
} else {
// 不支持的方法
http_response_code(405);
echo "不支持的请求方法";
}
?>
可以使用如上php进行上报与查询 使用post如下进行更新 id=自定义&value=xxx 使用get如下进行查询 id=自定义
通知脚本可以调用的参数有公网IP、公网端口、IP4P、协议、绑定端口等;目前可以实现输出方式为 “内网IP:绑定端口——打洞公网IP:端口”;比如使用脚本可以输出“100.125.136.199:13485——112.137.195.83:5957” ;但是100.125.136.199这个IP实际上是路由拨号后或得的移动宽带的内网IP,实际想要的是转发后的内网的IP的;最终实现类似于“192.168.10.123:80——112.137.195.83:5957”这种,请问如何实现?非常感谢 另一个求教事项:请AI写了一个脚本,想要通过webhook来通知变化后的公网IP和端口,但是不能实现 代码如下:
!/bin/sh
发送HTTP GET请求
result=$(curl "http://www.baidu.com/tool/shownat.php?op=put&host=$1&port=$2" 2>/dev/null)
将$1和$2(用冒号分隔)写入文件
echo "$1:$2" > /etc/storage/ip3.txt
设置webhook的URL
webhook_url="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=12345678-1234-1234-1234-d95e12345678"
构造JSON格式的payload
payload="{\"text\": \"IP: $1:$2\"}"
发送POST请求到webhook
curl -X POST -H "Content-Type: application/json" -d "$payload" "$webhook_url" 2>/dev/null
curl -X POST -H "Content-Type: application/json" -d "$payload" "$webhook_url"
实际运行后只能输出 ip3.txt 这个文档(内含公网IP和端口),但不能实现通过webhook进行通知(webhook在另一项目上正常使用,排除webhook问题),现在不清楚是哪里出了问题了 请高手指教,不胜感激