用Worker造一个IP信息显示
1.前言
在使用像curl ip.sb这样的服务时,我萌生了自己创建一个的念头。由于CloudFlare的强大功能,我决定通过CloudFlare Workers来实现这样的服务。然而,在使用CloudFlare Worker的过程中,遇到了一些关于SSL/HTTPS的问题,尽管问题不算大。
2.workers的代码
以下是我使用的Workers代码:
addEventListener('fetch', (event) => {
event.respondWith(handleRequest(event.request));
});
async function handleRequest(request) {
// 获取请求的客户端 IP 地址
const clientIP = request.headers.get('cf-connecting-ip');
// 解析请求中的参数,根据参数决定返回的 IP 类型
const params = new URL(request.url).searchParams;
const ipType = params.get('type');
// 根据 IP 类型构造响应
let ipAddress;
if (ipType === 'ipv4') {
ipAddress = clientIP.includes(':') ? clientIP.split(':')[0] : clientIP;
} else if (ipType === 'ipv6') {
ipAddress = clientIP.includes(':') ? clientIP : '';
} else {
ipAddress = clientIP;
}
// 返回 IP 地址
return new Response(ipAddress + '\n', {
status: 200,
headers: {
'Content-Type': 'text/plain',
},
});
}
我将该服务绑定到了自定义域名:ip.at9.net。
3.使用
通过浏览器访问 ip.at9.net,可以直接显示当前的IP地址。同样,命令行终端使用 curl https://ip.at9.net 也能够直接获取IP。
4.总结
在实际测试中,我遇到了一个问题:“无法使用 curl ip.at9.net 返回IP地址,而只能使用 curl https://ip.at9.net 返回IP”。经过调查,发现这是由于CloudFlare的SSL问题导致的,目前还没有一个确切的解决方法。