PageSourceSearch

https://anycast.ink/_nuxt/B_1PK-Zy.js

js anycast.ink collected 2026-10-08 05:21:58 UTC 16,344 bytes, 1 lines download raw bytes

1import{j as ss,r as v,k as j,o as ts,l as G,c as i,f as s,i as x,g as _,t as n,u as a,m as es,v as as,p as ls,q as is,F as P,h as S,n as w,a as o}from"./BkU8sLL4.js";const os={class:"container mx-auto p-4"},ns={class:"max-w-4xl mx-auto"},rs={class:"card bg-base-200/50 backdrop-blur-md p-6"},ds={class:"form-control"},cs={class:"label"},us={class:"label-text-alt"},vs={class:"flex gap-2"},ps=["placeholder"],fs=["disabled"],ms={key:0,class:"mt-2 text-error text-sm"},bs={class:"mt-4 grid md:grid-cols-2 gap-4"},gs={class:"form-control"},hs={class:"dropdown w-full"},ys={tabindex:"0",class:"btn btn-outline w-full justify-between"},xs={tabindex:"0",class:"dropdown-content z-[1] menu p-2 shadow bg-base-200 rounded-box w-full"},_s={class:"form-control"},ws={class:"dropdown w-full"},ks={tabindex:"0",class:"btn btn-outline w-full justify-between"},Ps={tabindex:"0",class:"dropdown-content z-[1] menu p-2 shadow bg-base-200 rounded-box w-full max-h-60 overflow-y-auto"},Ss=["onClick"],Cs={key:0,class:"fas fa-check text-sm text-primary"},Is={key:0,class:"mt-6 text-center"},Ns={key:1,class:"mt-6 alert alert-error"},As={key:2,class:"mt-6 space-y-4"},js={class:"card bg-base-300"},Ts={class:"card-body p-4"},$s={class:"flex items-center justify-between mb-4"},Vs={class:"tabs tabs-boxed bg-base-200"},Ds={key:0,class:"grid gap-4"},Os={class:"grid grid-cols-2 md:grid-cols-3 gap-4"},Rs={class:"stat bg-base-200 rounded-box p-3"},Ms={key:0,class:"stat-value text-lg"},Hs={key:1},Es={class:"stat-value text-lg"},Ls={class:"stat-desc"},Bs={class:"stat bg-base-200 rounded-box p-3"},Fs={class:"stat-value text-lg"},Ws={class:"stat bg-base-200 rounded-box p-3"},zs={class:"stat-value text-lg"},Gs={class:"stat bg-base-200 rounded-box p-3"},Js={class:"stat-value text-lg"},qs={key:0,class:"bg-base-200 rounded-box p-3"},Ks={class:"flex flex-wrap gap-2"},Us={class:"badge badge-primary"},Qs={key:0,class:"fas fa-chevron-right mx-1 text-xs opacity-50"},Xs={key:1,class:"bg-base-200 rounded-box p-3"},Ys={class:"flex flex-wrap gap-2"},Zs={key:2,class:"bg-base-200 rounded-box p-3"},st={class:"flex flex-wrap gap-2"},tt={key:1,class:"space-y-4"},et={key:0,class:"flex justify-center items-center py-8"},at={class:"stats shadow bg-base-200"},lt={class:"stat"},it={class:"stat-value text-primary"},ot={class:"stat-desc"},nt={class:"stat"},rt={class:"stat-value text-primary"},dt={class:"overflow-x-auto"},ct={class:"table table-zebra w-full"},ut={class:"flex items-center gap-2"},vt={class:"text-center"},pt={key:2,class:"grid gap-4"},ft={class:"bg-base-200 rounded-box p-4"},mt={class:"flex items-center justify-between mb-4"},bt={class:"flex gap-2"},gt=["onClick"],ht={key:0,class:"text-center py-4"},yt={key:1,class:"space-y-4"},xt={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},_t={class:"stat bg-base-300 rounded-box p-4"},wt={class:"stat-value text-lg"},kt={class:"stat-desc"},Pt={class:"stat bg-base-300 rounded-box p-4"},St={class:"stat-value text-lg"},Ct={class:"stat-desc"},It={class:"bg-base-300 rounded-box p-4"},Nt={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},At={class:"font-medium"},jt={class:"text-sm opacity-75"},Tt={class:"text-sm opacity-75"},$t={key:3},Vt={class:"font-mono text-sm whitespace-pre-wrap overflow-x-auto"},Dt={class:"card-body p-4"},Ot={class:"card-title text-lg"},Rt={class:"mt-2 font-mono text-sm whitespace-pre-wrap overflow-x-auto"},Mt={__name:"bgp",setup(Ht){const c=v(""),D=v(!1),k=v(""),B=v([]),T=v("internet"),b=v([]),g=v([]),p=v("summary"),O=v(!1),$=v(!1),C=v(null),f=v(null),H=v("prefix"),R=j(()=>T.value==="dn42"),J=j(()=>B.value.filter(l=>{const t=l.toLowerCase();return T.value==="dn42"?t.includes("dn42"):!t.includes("dn42")&&!t.includes("home")})),q=j(()=>R.value?"输入IPv4/IPv6地址或前缀,例如: 172.22.0.0/24 或 fd00::/8":"输入IPv6地址或前缀,例如: 2607:f858::/32"),E=j(()=>{if(!c.value)return!0;const l=c.value.trim(),t=l.split("/"),e=t[0],r=t[1];if(r!==void 0){const I=parseInt(r);if(isNaN(I)||I<0||I>128)return!1}const d=/^[0-9a-fA-F:]+$/.test(e),m=e.split(":").length<=8,N=(e.match(/::/g)||[]).length<=1,V=d&&m&&N,y=/^(\d{1,3}\.){3}\d{1,3}(\/\d{1,2})?$/;return R.value&&y.test(l)||V}),F=j(()=>
1{if(!c.value)return"";const l=c.value.trim();if(l.includes("/")){const[,t]=l.split("/"),e=parseInt(t);if(isNaN(e)||e<0||e>128)return"IPv6前缀长度必须在0-128之间"}return R.value?"请输入有效的IPv4或IPv6地址/前缀":"请输入有效的IPv6地址/前缀"}),h=j(()=>{if(!g.value.length)return{};const l={table:null,protocol:null,status:null,asPath:null,nextHops:new Set,communities:new Set},t=g.value[0].data,e=t.match(/Table ([^:]+):/);e&&(l.table=e[1]);const r=t.match(/\[(\w+)\s+\d{4}-\d{2}-\d{2}/);r&&(l.protocol=r[1]);const d=t.match(/(unreachable|unicast|blackhole)/);d&&(l.status=d[1]);const m=t.match(/\] \* \(\d+\) \[(.*?)\]/);m&&(l.asPath=m[1].split(" ").filter(y=>/AS?\d+i?/.test(y)).map(y=>y.replace(/^AS/,"").replace("i","")));const N=t.matchAll(/via ([0-9a-fA-F:.]+)/gi);for(const y of N)l.nextHops.add(y[1]);const V=t.matchAll(/BGP.community: \[(.*?)\]/gi);for(const y of V)y[1].split(" ").forEach(I=>{l.communities.add(I)});return{...l,nextHops:Array.from(l.nextHops),communities:Array.from(l.communities)}});async function K(){try{const t=await(await fetch("https://lg.pysio.online/api/",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({servers:[],type:"server_list",args:""})})).json();if(t.error)throw new Error(t.error);B.value=t.result.filter(e=>!e.server.toLowerCase().includes("home")).map(e=>e.server),b.value=[]}catch(l){k.value="获取服务器列表失败: "+l.message}}async function W(){if(!c.value.trim()){k.value="请输入查询目标";return}if(!b.value.length){k.value="请选择查询节点";return}if(!E.value){k.value=F.value;return}D.value=!0,k.value="",g.value=[],f.value=null,C.value=null;try{const t=await(await fetch("https://lg.pysio.online/api/",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({servers:b.value,type:"bird",args:`show route for ${c.value}`})})).json();if(t.error)throw new Error(t.error);g.value=t.result,await M()}catch(l){k.value="查询失败: "+l.message}finally{D.value=!1}}ts(()=>{K(),X()});function U(l){return l?new Date(l).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"N/A"}async function Q(l){H.value=l,await M()}const L=v([]);async function X(){try{const t=await(await fetch("https://lg.pysio.online/api/",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({servers:[],type:"server_list",args:""})})).json();t.error||(L.value=t.result.filter(e=>{const r=e.server.toLowerCase();return!r.includes("dn42")&&!r.includes("home")}).map(e=>({name:e.server})))}catch(l){console.error("获取节点列表失败:",l)}}async function z(){if(!(!c.value||O.value)){O.value=!0;try{const[l,t]=await Promise.all([fetch(`https://stat.ripe.net/data/visibility/data.json?resource=${c.value}`),fetch("https://lg.pysio.online/api/",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({servers:L.value.map(d=>d.name),type:"bird",args:`show route for ${c.value}`})})]),e=await l.json(),r=await t.json();if(e.status==="ok"){const d=e.data.visibilities.map(u=>({name:u.probe.name,ixp:u.probe.ixp,ipv4_peers:u.probe.ipv4_peer_count,ipv6_peers:u.probe.ipv6_peer_count,ipv6_full_peers:u.ipv6_full_table_peer_count,visible:u.ipv6_full_table_peers_not_seeing.length===0,type:"ris"})),m=L.value.map((u,A)=>({name:u.name,visible:r.result?.[A]?.data?.includes(c.value)??!1,type:"custom"})),N=d.reduce((u,A)=>u+A.ipv6_full_peers,0),y=(d.reduce((u,A)=>u+(A.visible?A.ipv6_full_peers:0),0)/N*100).toFixed(1),I=m.length,Z=(m.filter(u=>u.visible).length/I*100).toFixed(1);C.value={risTotal:N,risVisibilityPercent:y,pysioVisibilityPercent:Z,probes:[...m,...d]}}}catch(l){console.error("获取可见性数据失败:",l)}finally{O.value=!1}}}async function M(){if(!(!c.value||$.value)){$.value=!0;try{let l="",t="";if(H.value==="prefix")t="ip",l=c.value.split("/")[0];else{t="asn";const d=h.value?.asPath;if(!d?.length)throw new Error("未找到AS信息");l=d[0].replace(/\D/g,"")}if(!l)throw new Error("无效的查询对象");const r=await(await fetch(`https://whois.akaere.online/${t}/${encodeURIComponent(l)}`)).json();if(r.success)f.value={name:r.data.name,description:r.data.description,status:Array.isArray(r.data.status)?r.data.status.join(", "):r.data.status,lastModified:r.data.lastModified,contacts:r.data.entities?.map(d=>({role:d.roles[0],name:d.vcardArray[1].find(m=>m[0]==="fn")?.[3],email:d.vcardArray[1].find(m=>m[0]==="email")?.[3]}))||[]};else throw new Error(r.error||"查询失败")}catch(l){console.error("获取WHOIS数据失败:",l),k.value=l.message,f.value=null}finally{$.value=!1}}}G(g,async()=>{g.value.length>0&&(await M(),p.value==="visibility"&&await z())}),G(p,async l=>{l==="visibility"&&!C.value&&g.value.length>0?await z():l==="whois"&&!f.value&&g.value.length>0&&await M()});function Y(l){const t=b.value.indexOf(l);t===-1?b.value.push(l):b.value.splice(t,1)}return(l,t)=>(o(),i("div",os,[t[40]||(t[40]=s("h1",{class:"text-3xl font-bold text-center mb-8"},[s("i",{class:"fas fa-network-wired mr-2"}),x("BGP 路由分析 ")],-1)),s("div",ns,[s("div",rs,[s("div",ds,[s("label",cs,[t[7]||(t[7]=s("span",{class:"label-text text-lg"},"查询目标",-1)),s("span",us,n(a(R)?"支持IPv4/IPv6地址或前缀":"仅支持IPv6地址或前缀"),1)]),s("div",vs,[es(s("input",{"onUpdate:modelValue":t[0]||(t[0]=e=>is(c)?c.value=e:null),type:"text",placeholder:a(q),class:"input input-bordered flex-1",onKeyup:ls(W,["enter"])},null,40,ps),[[as,a(c)]]),s("button",{class:"btn btn-primary min-w-[120px]",onClick:W,disabled:a(D)||!a(E)},[...t[8]||(t[8]=[s("i",{class:"fas fa-search mr-2"},null,-1),x("查询 ",-1)])],8,fs)]),a(c)&&!a(E)?(o(),i("div",ms,[t[9]||(t[9]=s("i",{class:"fas fa-exclamation-circle mr-1"},null,-1)),x(" "+n(a(F)),1)])):_("",!0),s("div",bs,[s("div",gs,[t[11]||(t[11]=s("label",{class:"label"},[s("span",{class:"label-text"},"网络类型")],-1)),s("div",hs,[s("label",ys,[s("span",null,n(a(T)==="dn42"?"DN42 网络":"公网"),1),t[10]||(t[10]=s("i",{class:"fas fa-chevron-down"},null,-1))]),s("ul",xs,[s("li",null,[s("a",{onClick:t[1]||(t[1]=e=>T.value="dn42")},"DN42 网络")]),s("li",null,[s("a",{onClick:t[2]||(t[2]=e=>T.value="internet")},"公网")])])])]),s("div",_s,[t[13]||(t[13]=s("label",{class:"label"},[s("span",{class:"label-text"},"查询节点")],-1)),s("div",ws,[s("label",ks,[s("span",null,n(a(b).length?`已选择 ${a(b).length} 个节点`:"选择节点"),1),t[12]||(t[12]=s("i",{class:"fas fa-chevron-down"},null,-1))]),s("ul",Ps,[(o(!0),i(P,null,S(a(J),e=>(o(),i("li",{key:e},[s("a",{onClick:r=>Y(e),class:w(["flex items-center gap-2 px-4 py-2 hover:bg-base-300 rounded-lg transition-colors",{"bg-primary/10":a(b).includes(e)}])},[s("div",{class:w(["flex-none w-5 h-5 rounded border-2 flex items-center justify-center",a(b).includes(e)?"border-primary bg-primary/20":"border-base-content/50"])},[a(b).includes(e)?(o(),i("i",Cs)):_("",!0)],2),x(" "+n(e),1)],10,Ss)]))),128))])])])])]),a(D)?(o(),i("div",Is,[...t[14]||(t[14]=[s("span",{class:"loading loading-spinner loading-lg"},null,-1)])])):_("",!0),a(k)?(o(),i("div",Ns,[t[15]||(t[15]=s("i",{class:"fas fa-exclamation-circle"},null,-1)),s("span",null,n(a(k)),1)])):_("",!0),a(g).length?(o(),i("div",As,[s("div",js,[s("div",Ts,[s("div",$s,[t[20]||(t[20]=s("h3",{class:"card-title text-lg"},[s("i",{class:"fas fa-chart-line mr-2"}),x("路由分析 ")],-1)),s("div",Vs,[s("a",{class:w(["tab",{"tab-active":a(p)==="summary"}]),onClick:t[3]||(t[3]=e=>p.value="summary")}
1,[...t[16]||(t[16]=[s("i",{class:"fas fa-list-ul mr-1"},null,-1),x("摘要 ",-1)])],2),s("a",{class:w(["tab",{"tab-active":a(p)==="visibility"}]),onClick:t[4]||(t[4]=e=>p.value="visibility")},[...t[17]||(t[17]=[s("i",{class:"fas fa-eye mr-1"},null,-1),x("可见性 ",-1)])],2),s("a",{class:w(["tab",{"tab-active":a(p)==="whois"}]),onClick:t[5]||(t[5]=e=>p.value="whois")},[...t[18]||(t[18]=[s("i",{class:"fas fa-info-circle mr-1"},null,-1),x("WHOIS ",-1)])],2),s("a",{class:w(["tab",{"tab-active":a(p)==="raw"}]),onClick:t[6]||(t[6]=e=>p.value="raw")},[...t[19]||(t[19]=[s("i",{class:"fas fa-code mr-1"},null,-1),x("原始 ",-1)])],2)])]),a(p)==="summary"?(o(),i("div",Ds,[s("div",Os,[s("div",Rs,[t[22]||(t[22]=s("div",{class:"stat-title text-xs"},"注册对象",-1)),a($)?(o(),i("div",Ms,[...t[21]||(t[21]=[s("span",{class:"loading loading-spinner loading-sm"},null,-1)])])):(o(),i("div",Hs,[s("div",Es,n(a(f)?.name||"N/A"),1),s("div",Ls,n(a(f)?.description||""),1)]))]),s("div",Bs,[t[23]||(t[23]=s("div",{class:"stat-title text-xs"},"路由表",-1)),s("div",Fs,n(a(h).table||"N/A"),1)]),s("div",Ws,[t[24]||(t[24]=s("div",{class:"stat-title text-xs"},"协议",-1)),s("div",zs,n(a(h).protocol||"N/A"),1)]),s("div",Gs,[t[25]||(t[25]=s("div",{class:"stat-title text-xs"},"状态",-1)),s("div",Js,n(a(h).status||"N/A"),1)])]),a(h).asPath?(o(),i("div",qs,[t[26]||(t[26]=s("div",{class:"text-sm font-semibold mb-2"},"AS路径",-1)),s("div",Ks,[(o(!0),i(P,null,S(a(h).asPath,(e,r)=>(o(),i("div",{key:r,class:"flex items-center"},[s("span",Us,"AS"+n(e),1),r<a(h).asPath.length-1?(o(),i("i",Qs)):_("",!0)]))),128))])])):_("",!0),a(h).nextHops.length?(o(),i("div",Xs,[t[27]||(t[27]=s("div",{class:"text-sm font-semibold mb-2"},"下一跳",-1)),s("div",Ys,[(o(!0),i(P,null,S(a(h).nextHops,e=>(o(),i("span",{key:e,class:"badge badge-secondary"},n(e),1))),128))])])):_("",!0),a(h).communities.length?(o(),i("div",Zs,[t[28]||(t[28]=s("div",{class:"text-sm font-semibold mb-2"},"BGP Community",-1)),s("div",st,[(o(!0),i(P,null,S(a(h).communities,e=>(o(),i("span",{key:e,class:"badge badge-accent"},n(e),1))),128))])])):_("",!0)])):a(p)==="visibility"?(o(),i("div",tt,[a(O)?(o(),i("div",et,[...t[29]||(t[29]=[s("div",{class:"loading loading-spinner loading-lg text-primary"},null,-1),s("span",{class:"ml-2"},"正在检测路由可见性...",-1)])])):(o(),i(P,{key:1},[s("div",at,[s("div",lt,[t[30]||(t[30]=s("div",{class:"stat-title"},"RIS 可见性",-1)),s("div",it,n(a(C)?.risVisibilityPercent)+"%",1),s("div",ot,"在 "+n(a(C)?.risTotal)+" 个 RIS 节点中可见",1)]),s("div",nt,[t[31]||(t[31]=s("div",{class:"stat-title"},"Pysio Networks 可见性",-1)),s("div",rt,n(a(C)?.pysioVisibilityPercent)+"%",1),t[32]||(t[32]=s("div",{class:"stat-desc"},"在我们的节点中可见",-1))])]),s("div",dt,[s("table",ct,[t[33]||(t[33]=s("thead",null,[s("tr",null,[s("th",null,"探测点"),s("th",null,"类型"),s("th",{class:"text-center"},"状态")])],-1)),s("tbody",null,[(o(!0),i(P,null,S(a(C)?.probes,e=>(o(),i("tr",{key:e.name,class:w({"bg-base-200":e.type==="custom"})},[s("td",null,[s("div",ut,n(e.name),1)]),s("td",null,n(e.type==="ris"?"RIPE RIS":"Looking Glass"),1),s("td",vt,[s("span",{class:w(e.visible?"text-success":"text-error")},[s("i",{class:w(["fas",e.visible?"fa-check":"fa-times"])},null,2)],2)])],2))),128))])])])],64))])):a(p)==="whois"?(o(),i("div",pt,[s("div",ft,[s("div",mt,[t[34]||(t[34]=s("div",{class:"text-sm font-semibold"},"WHOIS 信息",-1)),s("div",bt,[(o(),i(P,null,S(["prefix","asn"],e=>s("button",{key:e,class:w(["btn btn-sm",{"btn-primary":a(H)===e}]),onClick:r=>Q(e)},n(e==="prefix"?"前缀":"ASN"),11,gt)),64))])]),a($)?(o(),i("div",ht,[...t[35]||(t[35]=[s("span",{class:"loading loading-spinner"},null,-1)])])):a(f)?(o(),i("div",yt,[s("div",xt,[s("div",_t,[t[36]||(t[36]=s("div",{class:"stat-title"},"注册对象",-1)),s("div",wt,n(a(f).name),1),s("div",kt,n(a(f).description),1)]),s("div",Pt,[t[37]||(t[37]=s("div",{class:"stat-title"},"状态",-1)),s("div",St,n(a(f).status),1),s("div",Ct,"最后更新: "+n(U(a(f).lastModified)),1)])]),s("div",It,[t[38]||(t[38]=s("div",{class:"text-sm font-semibold mb-2"},"联系信息",-1)),s("div",Nt,[(o(!0),i(P,null,S(a(f).contacts,e=>(o(),i("div",{key:e.role},[s("div",At,n(e.role),1),s("div",jt,n(e.name),1),s("div",Tt,n(e.email),1)]))),128))])])])):_("",!0)])])):(o(),i("div",$t,[s("pre",Vt,n(a(g)[0].data),1)]))])]),(o(!0),i(P,null,S(a(g),e=>(o(),i("div",{key:e.server,class:"card bg-base-300"},[s("div",Dt,[s("h3",Ot,[t[39]||(t[39]=s("i",{class:"fas fa-server mr-2"},null,-1)),x(" "+n(e.server),1)]),s("pre",Rt,n(e.data),1)])]))),128))])):_("",!0)])])]))}},Bt=ss(Mt,[["__scopeId","data-v-dc2a86ec"]]);export{Bt as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.