IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Cloudflare worker 返回浏览器ip:端口

    est发表于 2022-10-09 23:12:02
    love 0

    看到个贴 返回客户端连接用的 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 的正确表示。。。。



沪ICP备19023445号-2号
友情链接