Cloudflare worker 返回浏览器ip:端口
Posted | stdout
看到个贴 返回客户端连接用的 IP 和端口号,想起来也需要熟悉一下 Cloudflare worker,于是拿来练练手
export default {
async fetch(request, env) {
return await handleRequest(request).catch(
(err) => new Response(err.stack, { status: 500 })
)
}
}
async function handleRequest(request) {
const { pathname } = new URL(request.url);
if (pathname === "/ip") {
const ip = request.headers.get('CF-Connecting-IP');
return new Response(ip + '\n');
}
if (pathname === "/ip:port") {
const ip = request.headers.get('CF-Connecting-IP');
const port = request.headers.get('est-Connecting-Port') || '?'
return new Response(ip + ':' + port + '\n');
}
return new Response('Tools:\n /ip\n/ip:port\n');
}
遇到一个问题,Cloudflare 官方有提供浏览器客户端IP变量 CF-Connecting-IP
但是缺少端口,查了下可以自己通过 cf.edge.client_port
这个变量获得, 方法是在进入 CF网站管理 面板 → Rules → Transform Rules → HTTP Request Header Modification 里添加一条请求头规则。如图:
但是 header 不能以 CF-
开头,所以这里改成 est-Connecting-Port
,就能获得客户端请求的 IP+端口 了
测试地址: t.本网站根域名/ip:port
目前还缺:IPv6 的正确表示。。。。
Comments