为了账号安全,请及时绑定邮箱和手机立即绑定

在 JS 中使用正则表达式从 Cloudflare cdn-cgi/trace 文本结果中提取

在 JS 中使用正则表达式从 Cloudflare cdn-cgi/trace 文本结果中提取

海绵宝宝撒 2022-10-27 10:50:24
您好我打算使用 Cloudflare cdn-cgi 跟踪服务来获取客户端 IP 和用户代理结果。如果我获取此链接:https://www.cloudflare.com/cdn-cgi/trace,我得到的结果是文本格式。结果文本示例:fl=47f54h=www.cloudflare.comip=11.111.11.11ts=1597428248.652visit_scheme=httpsuag=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36colo=OHhttp=http/2loc=UStls=TLSv1.3sni=plaintextwarp=off我做了一些研究,发现我需要使用正则表达式?但不确定如何从结果中仅提取 ip 和 uag。...ip=11.111.11.11...uag=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36...对于我获取的每个结果,如何从上述文本中提取结果11.111.11.11(所有客户端的 ip 更改)和(所有客户端的 uag 或用户代理更改)?Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
查看完整描述

2 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

你可以试试:

^(?:ip|uag)=(.*)$

上述正则表达式的解释:

  • ^, $- 分别代表行的开始和结束。

  • (?:ip|uag)ip- 表示匹配或uag字面意思的非捕获组。

  • =-=从字面上表示。

  • (.*)- 表示匹配任何零个或多个时间的第一个处理组,前面是ip=or uag=

您可以在此处找到上述正则表达式的演示。

const myRegexp = /^(?:ip|uag)=(.*)$/gm;

const myString = `fl=47f54

h=www.cloudflare.com

ip=11.111.11.11

ts=1597428248.652

visit_scheme=https

uag=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36

colo=OH

http=http/2

loc=US

tls=TLSv1.3

sni=plaintext

warp=off`;

let match;


let resultString = "";

match = myRegexp.exec(myString);

while (match != null) {

  resultString = resultString.concat(match[1] + "\n");

  match = myRegexp.exec(myString);

}

console.log(resultString);

第二种方法:


const myString = `fl=47f54

h=www.cloudflare.com

ip=11.111.11.11

ts=1597428248.652

visit_scheme=https

uag=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36

colo=OH

http=http/2

loc=US

tls=TLSv1.3

sni=plaintext

warp=off`;

// Split on new line filter on the condition that element starts with ip or uag and join

console.log(myString.split("\n").filter(el => el.startsWith("ip") || el.startsWith("uag")).join('\n'));



查看完整回答
反对 回复 2022-10-27
?
森林海

TA贡献2011条经验 获得超2个赞

如何将其转换为 JSON 然后访问它。


async function getCloudflareJSON(){

let data = await fetch('https://1.1.1.1/cdn-cgi/trace').then(res=>res.text())

let arr = data.trim().split('\n').map(e=>e.split('='))

return Object.fromEntries(arr)

}


getCloudflareJSON().then(console.log)


输出:


{fl: "202f225", h: "1.1.1.1", ip: "47.37.137.777", ts: "1625581799.09", visit_scheme: "https", …}


查看完整回答
反对 回复 2022-10-27
  • 2 回答
  • 0 关注
  • 250 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信