@@ -3,6 +3,7 @@ import { connect } from "cloudflare:sockets";
33
44let password = '' ;
55let proxyIP = '' ;
6+ let DNS64Server = '' ;
67//let sub = '';
78let subConverter = atob ( 'U1VCQVBJLkNNTGl1c3Nzcy5uZXQ=' ) ;
89let subConfig = atob ( 'aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0FDTDRTU1IvQUNMNFNTUi9tYXN0ZXIvQ2xhc2gvY29uZmlnL0FDTDRTU1JfT25saW5lX01pbmlfTXVsdGlNb2RlLmluaQ==' ) ;
@@ -75,7 +76,7 @@ export default {
7576 proxyIP = env . PROXYIP || env . proxyip || proxyIP ;
7677 proxyIPs = await ADD ( proxyIP ) ;
7778 proxyIP = proxyIPs [ Math . floor ( Math . random ( ) * proxyIPs . length ) ] ;
78-
79+ DNS64Server = env . DNS64 || env . NAT64 || ( DNS64Server != '' ? DNS64Server : atob ( "ZG5zNjQuY21saXVzc3NzLm5ldA==" ) ) ;
7980 socks5Address = env . HTTP || env . SOCKS5 || socks5Address ;
8081 socks5s = await ADD ( socks5Address ) ;
8182 socks5Address = socks5s [ Math . floor ( Math . random ( ) * socks5s . length ) ] ;
@@ -2059,9 +2060,9 @@ async function resolveToIPv6(target) {
20592060
20602061 // 查询NAT64 IPv6地址
20612062 async function queryNAT64 ( domain ) {
2062- const socket = connect ( atob ( 'ZG90Lm5hdDY0LmRrOjg1Mw==' ) , {
2063- secureTransport : 'on' ,
2064- allowHalfOpen : false
2063+ const socket = connect ( {
2064+ hostname : isIPv6 ( DNS64Server ) ? `[ ${ DNS64Server } ]` : DNS64Server ,
2065+ port : 53
20652066 } ) ;
20662067
20672068 const writer = socket . writable . getWriter ( ) ;
@@ -2190,25 +2191,34 @@ async function resolveToIPv6(target) {
21902191 return answers ;
21912192 }
21922193
2193- try {
2194- // 判断输入类型并处理
2195- if ( isIPv6 ( target ) ) {
2196- return target ; // IPv6直接返回
2194+ function convertToNAT64IPv6 ( ipv4Address ) {
2195+ const parts = ipv4Address . split ( '.' ) ;
2196+ if ( parts . length !== 4 ) {
2197+ throw new Error ( '无效的IPv4地址' ) ;
21972198 }
21982199
2199- let domain ;
2200- if ( isIPv4 ( target ) ) {
2201- domain = target + atob ( 'LmlwLjA5MDIyNy54eXo=' ) ; // IPv4转换为NAT64域名
2202- } else {
2203- // 域名先解析IPv4再转NAT64
2204- const ipv4 = await fetchIPv4 ( target ) ;
2205- domain = ipv4 + atob ( 'LmlwLjA5MDIyNy54eXo=' ) ;
2206- }
2200+ // 将每个部分转换为16进制
2201+ const hex = parts . map ( part => {
2202+ const num = parseInt ( part , 10 ) ;
2203+ if ( num < 0 || num > 255 ) {
2204+ throw new Error ( '无效的IPv4地址段' ) ;
2205+ }
2206+ return num . toString ( 16 ) . padStart ( 2 , '0' ) ;
2207+ } ) ;
2208+
2209+ // 构造NAT64
2210+ return DNS64Server . split ( '/96' ) [ 0 ] + hex [ 0 ] + hex [ 1 ] + ":" + hex [ 2 ] + hex [ 3 ] ;
2211+ }
22072212
2208- return await queryNAT64 ( domain ) ;
2213+ try {
2214+ // 判断输入类型并处理
2215+ if ( isIPv6 ( target ) ) return target ; // IPv6直接返回
2216+ const ipv4 = isIPv4 ( target ) ? target : await fetchIPv4 ( target ) ;
2217+ const nat64 = DNS64Server . endsWith ( '/96' ) ? convertToNAT64IPv6 ( ipv4 ) : await queryNAT64 ( ipv4 + atob ( 'LmlwLjA5MDIyNy54eXo=' ) ) ;
2218+ return isIPv6 ( nat64 ) ? nat64 : atob ( 'cHJveHlpcC5jbWxpdXNzc3MubmV0' ) ;
22092219 } catch ( error ) {
22102220 console . error ( '解析错误:' , error ) ;
2211- return `解析失败: ${ error . message } ` ;
2221+ return atob ( 'cHJveHlpcC5jbWxpdXNzc3MubmV0' ) ; ;
22122222 }
22132223}
22142224
0 commit comments