@@ -49,7 +49,7 @@ const testGatewayDomainName = 'www.google.com'
4949export const checkDomainInBlackList = ( BlackLisk : string [ ] , domain : string , CallBack ) => {
5050
5151 if ( Net . isIP ( domain ) ) {
52- console . log ( `checkDomainInBlackList domain [ ${ domain } ] is IP address! ` )
52+
5353 return CallBack ( null , BlackLisk . find ( n => { return n === domain } ) ? true : false )
5454 }
5555
@@ -281,7 +281,7 @@ const httpProxy = ( clientSocket: Net.Socket, buffer: Buffer, useGatWay: boolean
281281 const userAgent = httpHead . headers [ 'user-agent' ]
282282
283283 const CallBack = ( err ?: Error , _data ?: Buffer ) => {
284- console . log ( `tryConnectHost callback err [ ${ err } ], _data[ ${ _data } ]` )
284+
285285 if ( err ) {
286286
287287 if ( useGatWay && _data && _data . length && clientSocket . writable ) {
@@ -296,7 +296,6 @@ const httpProxy = ( clientSocket: Net.Socket, buffer: Buffer, useGatWay: boolean
296296 }
297297
298298 const id = `[${ clientSocket . remoteAddress . split ( ':' ) [ 3 ] } :${ clientSocket . remotePort } ][${ uuuu . uuid } ] `
299- console . log ( uuuu )
300299 return gatway . requestGetWay ( id , uuuu , userAgent , clientSocket )
301300
302301 }
@@ -318,7 +317,7 @@ const httpProxy = ( clientSocket: Net.Socket, buffer: Buffer, useGatWay: boolean
318317 const hostIp : domainData = ! isIp ? domainListPool . get ( hostName ) : { dns : [ { family : isIp , address : hostName , expire : null , connect : [ ] } ] , expire : null }
319318
320319 if ( ! hostIp ) {
321- console . log ( `domain connect to [ ${ hostName } ]` )
320+
322321 return isAllBlackedByFireWall ( hostName , ip6 , gatway , userAgent , domainListPool , ( err , _hostIp ) => {
323322 if ( err ) {
324323 console . log ( `[${ hostName } ] Blocked!` )
@@ -335,17 +334,40 @@ const httpProxy = ( clientSocket: Net.Socket, buffer: Buffer, useGatWay: boolean
335334 return tryConnectHost ( hostName , _hostIp , port , buffer , clientSocket , httpHead . isConnect , checkAgainTime , connectTimeOut , useGatWay , CallBack )
336335 } )
337336 }
338- console . log ( `checkDomainInBlackList CallBack hostName[ ${ hostName } ] is IP address, now do tryConnectHost ` )
337+
339338 return tryConnectHost ( hostName , hostIp , port , buffer , clientSocket , httpHead . isConnect , checkAgainTime , connectTimeOut , useGatWay , CallBack )
340339
341340 } )
342341
343342}
344-
345-
346- const getPac = ( hostIp : string , port : number , http : boolean ) => {
347-
348- const FindProxyForURL = `function FindProxyForURL ( url, host ) { return "${ http ? 'PROXY' : 'SOCKS' } ${ hostIp } :${ port . toString ( ) } ";}`
343+ /*
344+ declare const isInNet:( a: string, y: string, z: string ) => string
345+ declare const dnsResolve :( a: any ) => string
346+ function FindProxyForURL ( url, host )
347+ {
348+ if ( isInNet ( dnsResolve( host ), "0.0.0.0", "255.0.0.0") ||
349+ isInNet( dnsResolve( host ), "172.16.0.0", "255.240.255.0") ||
350+ isInNet( dnsResolve( host ), "127.0.0.0", "255.255.255.0") ||
351+ isInNet ( dnsResolve( host ), "192.168.0.0", "255.255.0.0" ) ||
352+ isInNet ( dnsResolve( host ), "10.0.0.0", "255.0.0.0" )) {
353+ return "DIRECT";
354+ }
355+ return "${ http ? 'PROXY': ( sock5 ? 'SOCKS5' : 'SOCKS' ) } ${ hostIp }:${ port.toString() }";
356+ }
357+ */
358+ const getPac = ( hostIp : string , port : number , http : boolean , sock5 : boolean ) => {
359+
360+ const FindProxyForURL = `function FindProxyForURL ( url, host )
361+ {
362+ if ( isInNet ( dnsResolve( host ), "0.0.0.0", "255.0.0.0") ||
363+ isInNet( dnsResolve( host ), "172.16.0.0", "255.240.255.0") ||
364+ isInNet( dnsResolve( host ), "127.0.0.0", "255.255.255.0") ||
365+ isInNet ( dnsResolve( host ), "192.168.0.0", "255.255.0.0" ) ||
366+ isInNet ( dnsResolve( host ), "10.0.0.0", "255.0.0.0" )) {
367+ return "DIRECT";
368+ }
369+ return "${ http ? 'PROXY' : ( sock5 ? 'SOCKS5' : 'SOCKS' ) } ${ hostIp } :${ port . toString ( ) } ";
370+ }`
349371
350372 return res . _HTTP_200 ( FindProxyForURL )
351373}
@@ -408,22 +430,28 @@ export class proxyServer {
408430 const server = Net . createServer ( socket => {
409431 const ip = socket . remoteAddress
410432 const isWhiteIp = this . whiteIpList . find ( n => { return n === ip } ) ? true : false
411-
433+ let agent = 'Mozilla/5.0'
434+ console . log ( `new socket!` )
412435 socket . once ( 'data' , ( data : Buffer ) => {
413436 const dataStr = data . toString ( )
414437 if ( / ^ G E T \/ p a c / . test ( dataStr ) ) {
415- let ret = getPac ( this . localProxyServerIP , this . port , false )
438+ const httpHead = new HttpProxyHeader ( data )
439+ agent = httpHead . headers [ 'user-agent' ]
440+ const sock5 = / W i n d o w s N T | D a r w i n / i. test ( agent ) && ! / C F N e t w o r k / i. test ( agent )
441+
442+ let ret = getPac ( this . localProxyServerIP , this . port , false , sock5 )
416443 if ( / p a c H t t p / . test ( dataStr ) )
417- ret = getPac ( this . localProxyServerIP , this . port , true )
418- saveLog ( `/GET \/pac from :[${ socket . remoteAddress } ]` )
444+ ret = getPac ( this . localProxyServerIP , this . port , true , sock5 )
445+ console . log ( `/GET \/pac from :[${ socket . remoteAddress } ] sock5 [${ sock5 } ] agent [${ agent } ] httpHead.headers [${ Object . keys ( httpHead . headers ) } ]` )
446+ console . log ( dataStr )
419447 return socket . end ( ret )
420448 }
421449
422450 switch ( data . readUInt8 ( 0 ) ) {
423451 case 0x4 :
424- return socks = new Socks . sockt4 ( socket , data , this )
452+ return socks = new Socks . sockt4 ( socket , data , agent , this )
425453 case 0x5 :
426- return socks = new Socks . socks5 ( socket , this )
454+ return socks = new Socks . socks5 ( socket , agent , this )
427455 default :
428456 return httpProxy ( socket , data , useGatWay , this . hostGlobalIpV6 ? true : false , connectHostTimeOut , domainListPool , this . gateway , checkAgainTimeOut , domainBlackList )
429457 }
0 commit comments