@@ -3,6 +3,7 @@ import { connect } from 'cloudflare:sockets';
33
44let userID = '' ;
55let proxyIP = '' ;
6+ let DNS64Server = '' ;
67//let sub = '';
78let subConverter = atob ( 'U1VCQVBJLkNNTGl1c3Nzcy5uZXQ=' ) ;
89let subConfig = atob ( 'aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0FDTDRTU1IvQUNMNFNTUi9tYXN0ZXIvQ2xhc2gvY29uZmlnL0FDTDRTU1JfT25saW5lX01pbmlfTXVsdGlNb2RlLmluaQ==' ) ;
@@ -88,7 +89,7 @@ export default {
8889 proxyIP = env . PROXYIP || env . proxyip || proxyIP ;
8990 proxyIPs = await 整理 ( proxyIP ) ;
9091 proxyIP = proxyIPs [ Math . floor ( Math . random ( ) * proxyIPs . length ) ] ;
91-
92+ DNS64Server = env . DNS64 || env . NAT64 || ( DNS64Server != '' ? DNS64Server : atob ( "ZG5zNjQuY21saXVzc3NzLm5ldA==" ) ) ;
9293 socks5Address = env . HTTP || env . SOCKS5 || socks5Address ;
9394 socks5s = await 整理 ( socks5Address ) ;
9495 socks5Address = socks5s [ Math . floor ( Math . random ( ) * socks5s . length ) ] ;
@@ -2411,9 +2412,9 @@ async function resolveToIPv6(target) {
24112412
24122413 // 查询NAT64 IPv6地址
24132414 async function queryNAT64 ( domain ) {
2414- const socket = connect ( atob ( 'ZG90Lm5hdDY0LmRrOjg1Mw==' ) , {
2415- secureTransport : 'on' ,
2416- allowHalfOpen : false
2415+ const socket = connect ( {
2416+ hostname : isIPv6 ( DNS64Server ) ? `[ ${ DNS64Server } ]` : DNS64Server ,
2417+ port : 53
24172418 } ) ;
24182419
24192420 const writer = socket . writable . getWriter ( ) ;
@@ -2542,25 +2543,34 @@ async function resolveToIPv6(target) {
25422543 return answers ;
25432544 }
25442545
2545- try {
2546- // 判断输入类型并处理
2547- if ( isIPv6 ( target ) ) {
2548- return target ; // IPv6直接返回
2546+ function convertToNAT64IPv6 ( ipv4Address ) {
2547+ const parts = ipv4Address . split ( '.' ) ;
2548+ if ( parts . length !== 4 ) {
2549+ throw new Error ( '无效的IPv4地址' ) ;
25492550 }
25502551
2551- let domain ;
2552- if ( isIPv4 ( target ) ) {
2553- domain = target + atob ( 'LmlwLjA5MDIyNy54eXo=' ) ; // IPv4转换为NAT64域名
2554- } else {
2555- // 域名先解析IPv4再转NAT64
2556- const ipv4 = await fetchIPv4 ( target ) ;
2557- domain = ipv4 + atob ( 'LmlwLjA5MDIyNy54eXo=' ) ;
2558- }
2552+ // 将每个部分转换为16进制
2553+ const hex = parts . map ( part => {
2554+ const num = parseInt ( part , 10 ) ;
2555+ if ( num < 0 || num > 255 ) {
2556+ throw new Error ( '无效的IPv4地址段' ) ;
2557+ }
2558+ return num . toString ( 16 ) . padStart ( 2 , '0' ) ;
2559+ } ) ;
2560+
2561+ // 构造NAT64
2562+ return DNS64Server . split ( '/96' ) [ 0 ] + hex [ 0 ] + hex [ 1 ] + ":" + hex [ 2 ] + hex [ 3 ] ;
2563+ }
25592564
2560- return await queryNAT64 ( domain ) ;
2565+ try {
2566+ // 判断输入类型并处理
2567+ if ( isIPv6 ( target ) ) return target ; // IPv6直接返回
2568+ const ipv4 = isIPv4 ( target ) ? target : await fetchIPv4 ( target ) ;
2569+ const nat64 = DNS64Server . endsWith ( '/96' ) ? convertToNAT64IPv6 ( ipv4 ) : await queryNAT64 ( ipv4 + atob ( 'LmlwLjA5MDIyNy54eXo=' ) ) ;
2570+ return isIPv6 ( nat64 ) ? nat64 : atob ( 'cHJveHlpcC5jbWxpdXNzc3MubmV0' ) ;
25612571 } catch ( error ) {
25622572 console . error ( '解析错误:' , error ) ;
2563- return `解析失败: ${ error . message } ` ;
2573+ return atob ( 'cHJveHlpcC5jbWxpdXNzc3MubmV0' ) ; ;
25642574 }
25652575}
25662576
0 commit comments