在 JS 中使用正则表达式从 Cloudflare cdn-cgi/trace 文本结果中提取 ip 和 uag
Extract ip and uag from Cloudflare cdn-cgi/trace text result using regex in JS
您好,我打算使用 Cloudflare cdn-cgi 跟踪服务来获取客户端 IP 和用户代理结果。如果我获取此 link: https://www.cloudflare.com/cdn-cgi/trace
,我得到的结果是文本格式。
结果文本示例:
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
我做了一些研究,发现我需要使用正则表达式?但不确定如何从结果中仅提取 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 更改)和 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
(所有客户端的 uag 或用户代理更改)?
你可以试试:
^(?:ip|uag)=(.*)$
上面正则表达式的解释:
^, $
- 分别表示行的开始和结束。
(?:ip|uag)
- 表示匹配 ip
或 uag
的非捕获组。
=
- 字面上表示 =
。
(.*)
- 表示第一个匹配任何零次或多次前面有 ip=
或 uag=
.[=57 的匹配组=]
你可以在here.
中找到上述正则表达式的演示
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'));
如何将其转换为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", …}
参考:
Link1
您好,我打算使用 Cloudflare cdn-cgi 跟踪服务来获取客户端 IP 和用户代理结果。如果我获取此 link: https://www.cloudflare.com/cdn-cgi/trace
,我得到的结果是文本格式。
结果文本示例:
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
我做了一些研究,发现我需要使用正则表达式?但不确定如何从结果中仅提取 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 更改)和 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
(所有客户端的 uag 或用户代理更改)?
你可以试试:
^(?:ip|uag)=(.*)$
上面正则表达式的解释:
^, $
- 分别表示行的开始和结束。(?:ip|uag)
- 表示匹配ip
或uag
的非捕获组。=
- 字面上表示=
。(.*)
- 表示第一个匹配任何零次或多次前面有ip=
或uag=
.[=57 的匹配组=]
你可以在here.
中找到上述正则表达式的演示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'));
如何将其转换为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", …}
参考: Link1