girl 9.1.1 → 9.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/girl/proxy.rb +9 -1
- data/lib/girl/proxy_worker.rb +30 -30
- data/lib/girl/proxyd_worker.rb +14 -14
- data/lib/girl/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 673184bfb0785b65e56e4715c2b007481ae91d16620fbc11e3f6e12c50f511b5
|
4
|
+
data.tar.gz: 9a37c381bbf266cac12239b479214979202a8b715a1db0c5f443f8ecd3ca046a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d291af3cfc1ff8813e187062a55b93ad9f0c6a52f7bd14e19c4638becd98c96451da21146a167111c5da01d2f20b6fc31711143e71d82e82bf5cf68d8e420efb
|
7
|
+
data.tar.gz: 9a6e13e0f756afd3a024f7c7c386fd18e5978488bd1909fd69dbabffacd25e71d8d0c286920ec86665ed69766cee1464ba1d4a8fcab94055fdf82d405392d96b
|
data/lib/girl/proxy.rb
CHANGED
@@ -23,9 +23,12 @@ module Girl
|
|
23
23
|
|
24
24
|
conf = JSON.parse( IO.binread( config_path ), symbolize_names: true )
|
25
25
|
puts "load #{ config_path } #{ conf.inspect }"
|
26
|
+
redir_host = conf[ :redir_host ]
|
26
27
|
redir_port = conf[ :redir_port ]
|
27
28
|
memd_port = conf[ :memd_port ]
|
29
|
+
relayd_host = conf[ :relayd_host ]
|
28
30
|
relayd_port = conf[ :relayd_port ]
|
31
|
+
tspd_host = conf[ :tspd_host ]
|
29
32
|
tspd_port = conf[ :tspd_port ]
|
30
33
|
proxyd_host = conf[ :proxyd_host ]
|
31
34
|
proxyd_port = conf[ :proxyd_port ]
|
@@ -55,7 +58,6 @@ module Girl
|
|
55
58
|
h_src_underhalf = conf[ :h_src_underhalf ] # V
|
56
59
|
h_dst_overflow = conf[ :h_dst_overflow ] # W
|
57
60
|
h_dst_underhalf = conf[ :h_dst_underhalf ] # X
|
58
|
-
|
59
61
|
expire_connecting = conf[ :expire_connecting ] # 连接多久没有建成关闭(秒)
|
60
62
|
expire_long_after = conf[ :expire_long_after ] # 长连接多久没有新流量关闭(秒)
|
61
63
|
expire_proxy_after = conf[ :expire_proxy_after ] # proxy多久没有收到流量重建(秒)
|
@@ -63,9 +65,12 @@ module Girl
|
|
63
65
|
expire_short_after = conf[ :expire_short_after ] # 短连接创建多久后关闭(秒)
|
64
66
|
is_debug = conf[ :is_debug ]
|
65
67
|
|
68
|
+
redir_host = redir_host ? redir_host.to_s : '0.0.0.0'
|
66
69
|
redir_port = redir_port ? redir_port.to_i : 6666
|
67
70
|
memd_port = memd_port ? memd_port.to_i : redir_port + 1
|
71
|
+
relayd_host = relayd_host ? relayd_host.to_s : '0.0.0.0'
|
68
72
|
relayd_port = relayd_port ? relayd_port.to_i : redir_port + 2
|
73
|
+
tspd_host = tspd_host ? tspd_host.to_s : '0.0.0.0'
|
69
74
|
tspd_port = tspd_port ? tspd_port.to_i : 7777
|
70
75
|
raise "missing proxyd host" unless proxyd_host
|
71
76
|
proxyd_port = proxyd_port ? proxyd_port.to_i : 6060
|
@@ -141,9 +146,12 @@ module Girl
|
|
141
146
|
end
|
142
147
|
|
143
148
|
worker = Girl::ProxyWorker.new(
|
149
|
+
redir_host,
|
144
150
|
redir_port,
|
145
151
|
memd_port,
|
152
|
+
relayd_host,
|
146
153
|
relayd_port,
|
154
|
+
tspd_host,
|
147
155
|
tspd_port,
|
148
156
|
proxyd_host,
|
149
157
|
proxyd_port,
|
data/lib/girl/proxy_worker.rb
CHANGED
@@ -3,9 +3,12 @@ module Girl
|
|
3
3
|
include Dns
|
4
4
|
|
5
5
|
def initialize(
|
6
|
+
redir_host,
|
6
7
|
redir_port,
|
7
8
|
memd_port,
|
9
|
+
relayd_host,
|
8
10
|
relayd_port,
|
11
|
+
tspd_host,
|
9
12
|
tspd_port,
|
10
13
|
proxyd_host,
|
11
14
|
proxyd_port,
|
@@ -103,12 +106,12 @@ module Girl
|
|
103
106
|
@is_client_fastopen = is_client_fastopen
|
104
107
|
@is_server_fastopen = is_server_fastopen
|
105
108
|
|
106
|
-
new_a_redir( redir_port )
|
109
|
+
new_a_redir( redir_host, redir_port )
|
107
110
|
new_a_infod( redir_port )
|
108
111
|
new_a_memd( memd_port )
|
109
|
-
new_a_relayd( relayd_port )
|
110
|
-
new_a_rsvd( tspd_port )
|
111
|
-
new_a_tspd( tspd_port )
|
112
|
+
new_a_relayd( relayd_host, relayd_port )
|
113
|
+
new_a_rsvd( tspd_host, tspd_port )
|
114
|
+
new_a_tspd( tspd_host, tspd_port )
|
112
115
|
new_a_proxy
|
113
116
|
end
|
114
117
|
|
@@ -710,14 +713,14 @@ module Girl
|
|
710
713
|
domain = src_info[ :destination_domain ]
|
711
714
|
port = src_info[ :destination_port ]
|
712
715
|
|
713
|
-
if @local_ips.include?( ip ) && [ @redir_port, @tspd_port ].include?( port ) then
|
716
|
+
if @local_ips.include?( ip ) && [ @redir_port, @relayd_port, @tspd_port ].include?( port ) then
|
714
717
|
puts "ignore #{ ip }:#{ port }"
|
715
718
|
close_src( src )
|
716
719
|
return
|
717
720
|
end
|
718
721
|
|
719
|
-
if [ domain, ip ].include?( @proxyd_host )
|
720
|
-
#
|
722
|
+
if [ domain, ip ].include?( @proxyd_host ) && ![ 80, 443 ].include?( port ) then
|
723
|
+
# 访问远端非http端口,直连
|
721
724
|
puts "direct #{ ip } #{ port }"
|
722
725
|
new_a_dst( ip, src )
|
723
726
|
return
|
@@ -847,12 +850,12 @@ module Girl
|
|
847
850
|
end
|
848
851
|
|
849
852
|
def new_a_infod( infod_port )
|
850
|
-
|
851
|
-
infod_addr = Socket.sockaddr_in( infod_port,
|
853
|
+
infod_host = '127.0.0.1'
|
854
|
+
infod_addr = Socket.sockaddr_in( infod_port, infod_host )
|
852
855
|
infod = Socket.new( Socket::AF_INET, Socket::SOCK_DGRAM, 0 )
|
853
856
|
infod.setsockopt( Socket::SOL_SOCKET, Socket::SO_REUSEPORT, 1 ) if RUBY_PLATFORM.include?( 'linux' )
|
854
857
|
infod.bind( infod_addr )
|
855
|
-
puts "infod bind on #{
|
858
|
+
puts "infod bind on #{ infod_host } #{ infod_port }"
|
856
859
|
add_read( infod, :infod )
|
857
860
|
info = Socket.new( Socket::AF_INET, Socket::SOCK_DGRAM, 0 )
|
858
861
|
@infod_addr = infod_addr
|
@@ -861,14 +864,14 @@ module Girl
|
|
861
864
|
end
|
862
865
|
|
863
866
|
def new_a_memd( memd_port )
|
864
|
-
|
867
|
+
memd_host = '127.0.0.1'
|
865
868
|
memd = Socket.new( Socket::AF_INET, Socket::SOCK_STREAM, 0 )
|
866
869
|
memd.setsockopt( Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1 )
|
867
870
|
memd.setsockopt( Socket::SOL_SOCKET, Socket::SO_REUSEPORT, 1 ) if RUBY_PLATFORM.include?( 'linux' )
|
868
871
|
memd.setsockopt( Socket::IPPROTO_TCP, Socket::TCP_FASTOPEN, 5 ) if @is_server_fastopen
|
869
|
-
memd.bind( Socket.sockaddr_in( memd_port,
|
872
|
+
memd.bind( Socket.sockaddr_in( memd_port, memd_host ) )
|
870
873
|
memd.listen( 5 )
|
871
|
-
puts "memd listen on #{
|
874
|
+
puts "memd listen on #{ memd_host } #{ memd_port }"
|
872
875
|
add_read( memd, :memd )
|
873
876
|
end
|
874
877
|
|
@@ -944,32 +947,31 @@ module Girl
|
|
944
947
|
proxy_info
|
945
948
|
end
|
946
949
|
|
947
|
-
def new_a_redir( redir_port )
|
948
|
-
redir_ip = '0.0.0.0'
|
950
|
+
def new_a_redir( redir_host, redir_port )
|
949
951
|
redir = Socket.new( Socket::AF_INET, Socket::SOCK_STREAM, 0 )
|
950
952
|
redir.setsockopt( Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1 )
|
951
953
|
redir.setsockopt( Socket::SOL_SOCKET, Socket::SO_REUSEADDR, 1 )
|
952
954
|
redir.setsockopt( Socket::SOL_SOCKET, Socket::SO_REUSEPORT, 1 ) if RUBY_PLATFORM.include?( 'linux' )
|
953
955
|
redir.setsockopt( Socket::IPPROTO_TCP, Socket::TCP_FASTOPEN, BACKLOG ) if @is_server_fastopen
|
954
|
-
redir.bind( Socket.sockaddr_in( redir_port,
|
956
|
+
redir.bind( Socket.sockaddr_in( redir_port, redir_host ) )
|
955
957
|
redir.listen( BACKLOG )
|
956
|
-
puts "redir listen on #{
|
958
|
+
puts "redir listen on #{ redir_host } #{ redir_port }"
|
957
959
|
add_read( redir, :redir )
|
958
960
|
@redir_port = redir_port
|
959
961
|
@redir_local_address = redir.local_address
|
960
962
|
end
|
961
963
|
|
962
|
-
def new_a_relayd( relayd_port )
|
963
|
-
relayd_ip = '0.0.0.0'
|
964
|
+
def new_a_relayd( relayd_host, relayd_port )
|
964
965
|
relayd = Socket.new( Socket::AF_INET, Socket::SOCK_STREAM, 0 )
|
965
966
|
relayd.setsockopt( Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1 )
|
966
967
|
relayd.setsockopt( Socket::SOL_SOCKET, Socket::SO_REUSEADDR, 1 )
|
967
968
|
relayd.setsockopt( Socket::SOL_SOCKET, Socket::SO_REUSEPORT, 1 ) if RUBY_PLATFORM.include?( 'linux' )
|
968
969
|
relayd.setsockopt( Socket::IPPROTO_TCP, Socket::TCP_FASTOPEN, BACKLOG ) if @is_server_fastopen
|
969
|
-
relayd.bind( Socket.sockaddr_in( relayd_port,
|
970
|
+
relayd.bind( Socket.sockaddr_in( relayd_port, relayd_host ) )
|
970
971
|
relayd.listen( BACKLOG )
|
971
|
-
puts "relayd listen on #{
|
972
|
+
puts "relayd listen on #{ relayd_host } #{ relayd_port }"
|
972
973
|
add_read( relayd, :relayd )
|
974
|
+
@relayd_port = relayd_port
|
973
975
|
end
|
974
976
|
|
975
977
|
def new_a_rsv( data, addrinfo, domain, type )
|
@@ -994,27 +996,25 @@ module Girl
|
|
994
996
|
add_read( rsv, :rsv )
|
995
997
|
end
|
996
998
|
|
997
|
-
def new_a_rsvd( rsvd_port )
|
998
|
-
|
999
|
-
rsvd_addr = Socket.sockaddr_in( rsvd_port, rsvd_ip )
|
999
|
+
def new_a_rsvd( rsvd_host, rsvd_port )
|
1000
|
+
rsvd_addr = Socket.sockaddr_in( rsvd_port, rsvd_host )
|
1000
1001
|
rsvd = Socket.new( Socket::AF_INET, Socket::SOCK_DGRAM, 0 )
|
1001
1002
|
rsvd.setsockopt( Socket::SOL_SOCKET, Socket::SO_REUSEPORT, 1 ) if RUBY_PLATFORM.include?( 'linux' )
|
1002
1003
|
rsvd.bind( rsvd_addr )
|
1003
|
-
puts "rsvd bind on #{
|
1004
|
+
puts "rsvd bind on #{ rsvd_host } #{ rsvd_port }"
|
1004
1005
|
add_read( rsvd, :rsvd )
|
1005
1006
|
@rsvd = rsvd
|
1006
1007
|
end
|
1007
1008
|
|
1008
|
-
def new_a_tspd( tspd_port )
|
1009
|
-
tspd_ip = '0.0.0.0'
|
1009
|
+
def new_a_tspd( tspd_host, tspd_port )
|
1010
1010
|
tspd = Socket.new( Socket::AF_INET, Socket::SOCK_STREAM, 0 )
|
1011
1011
|
tspd.setsockopt( Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1 )
|
1012
1012
|
tspd.setsockopt( Socket::SOL_SOCKET, Socket::SO_REUSEADDR, 1 )
|
1013
1013
|
tspd.setsockopt( Socket::SOL_SOCKET, Socket::SO_REUSEPORT, 1 ) if RUBY_PLATFORM.include?( 'linux' )
|
1014
1014
|
tspd.setsockopt( Socket::IPPROTO_TCP, Socket::TCP_FASTOPEN, BACKLOG ) if @is_server_fastopen
|
1015
|
-
tspd.bind( Socket.sockaddr_in( tspd_port,
|
1015
|
+
tspd.bind( Socket.sockaddr_in( tspd_port, tspd_host ) )
|
1016
1016
|
tspd.listen( BACKLOG )
|
1017
|
-
puts "tspd listen on #{
|
1017
|
+
puts "tspd listen on #{ tspd_host } #{ tspd_port }"
|
1018
1018
|
add_read( tspd, :tspd )
|
1019
1019
|
@tspd_port = tspd_port
|
1020
1020
|
end
|
@@ -1686,7 +1686,7 @@ module Girl
|
|
1686
1686
|
def resolve_domain( domain, src )
|
1687
1687
|
return if src.nil? || src.closed?
|
1688
1688
|
|
1689
|
-
unless domain =~ /^[0-
|
1689
|
+
unless domain =~ /^(?=^.{3,255}$)[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$/ then
|
1690
1690
|
# 忽略非法域名
|
1691
1691
|
puts "ignore #{ domain }"
|
1692
1692
|
close_src( src )
|
data/lib/girl/proxyd_worker.rb
CHANGED
@@ -170,7 +170,7 @@ module Girl
|
|
170
170
|
close_dst( dst )
|
171
171
|
return
|
172
172
|
end
|
173
|
-
|
173
|
+
|
174
174
|
if !dst_info[ :overflowing ] && ( bytesize >= WBUFF_LIMIT ) then
|
175
175
|
proxy = dst_info[ :proxy ]
|
176
176
|
puts "add h_dst_overflow #{ im } #{ src_id } #{ domain }"
|
@@ -209,7 +209,7 @@ module Girl
|
|
209
209
|
close_p2( p2 )
|
210
210
|
return
|
211
211
|
end
|
212
|
-
|
212
|
+
|
213
213
|
if !p2_info[ :overflowing ] && ( bytesize >= WBUFF_LIMIT ) then
|
214
214
|
proxy = im_info[ :proxy ]
|
215
215
|
puts "add h_p2_overflow #{ im } #{ p2_id }"
|
@@ -641,12 +641,12 @@ module Girl
|
|
641
641
|
end
|
642
642
|
|
643
643
|
def new_a_infod( infod_port )
|
644
|
-
|
645
|
-
infod_addr = Socket.sockaddr_in( infod_port,
|
644
|
+
infod_host = '127.0.0.1'
|
645
|
+
infod_addr = Socket.sockaddr_in( infod_port, infod_host )
|
646
646
|
infod = Socket.new( Socket::AF_INET, Socket::SOCK_DGRAM, 0 )
|
647
647
|
infod.setsockopt( Socket::SOL_SOCKET, Socket::SO_REUSEPORT, 1 ) if RUBY_PLATFORM.include?( 'linux' )
|
648
648
|
infod.bind( infod_addr )
|
649
|
-
puts "infod bind on #{
|
649
|
+
puts "infod bind on #{ infod_host } #{ infod_port }"
|
650
650
|
add_read( infod, :infod )
|
651
651
|
info = Socket.new( Socket::AF_INET, Socket::SOCK_DGRAM, 0 )
|
652
652
|
@infod_addr = infod_addr
|
@@ -655,14 +655,14 @@ module Girl
|
|
655
655
|
end
|
656
656
|
|
657
657
|
def new_a_memd( memd_port )
|
658
|
-
|
658
|
+
memd_host = '127.0.0.1'
|
659
659
|
memd = Socket.new( Socket::AF_INET, Socket::SOCK_STREAM, 0 )
|
660
660
|
memd.setsockopt( Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1 )
|
661
661
|
memd.setsockopt( Socket::SOL_SOCKET, Socket::SO_REUSEPORT, 1 ) if RUBY_PLATFORM.include?( 'linux' )
|
662
662
|
memd.setsockopt( Socket::IPPROTO_TCP, Socket::TCP_FASTOPEN, 5 ) if @is_server_fastopen
|
663
|
-
memd.bind( Socket.sockaddr_in( memd_port,
|
663
|
+
memd.bind( Socket.sockaddr_in( memd_port, memd_host ) )
|
664
664
|
memd.listen( 5 )
|
665
|
-
puts "memd listen on #{
|
665
|
+
puts "memd listen on #{ memd_host } #{ memd_port }"
|
666
666
|
add_read( memd, :memd )
|
667
667
|
end
|
668
668
|
|
@@ -715,14 +715,14 @@ module Girl
|
|
715
715
|
end
|
716
716
|
|
717
717
|
def new_a_proxyd( proxyd_port )
|
718
|
-
|
718
|
+
proxyd_host = '0.0.0.0'
|
719
719
|
proxyd = Socket.new( Socket::AF_INET, Socket::SOCK_STREAM, 0 )
|
720
720
|
proxyd.setsockopt( Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1 )
|
721
721
|
proxyd.setsockopt( Socket::SOL_SOCKET, Socket::SO_REUSEPORT, 1 ) if RUBY_PLATFORM.include?( 'linux' )
|
722
722
|
proxyd.setsockopt( Socket::IPPROTO_TCP, Socket::TCP_FASTOPEN, BACKLOG ) if @is_server_fastopen
|
723
|
-
proxyd.bind( Socket.sockaddr_in( proxyd_port,
|
723
|
+
proxyd.bind( Socket.sockaddr_in( proxyd_port, proxyd_host ) )
|
724
724
|
proxyd.listen( BACKLOG )
|
725
|
-
puts "proxyd listen on #{
|
725
|
+
puts "proxyd listen on #{ proxyd_host } #{ proxyd_port }"
|
726
726
|
add_read( proxyd, :proxyd )
|
727
727
|
end
|
728
728
|
|
@@ -1120,7 +1120,7 @@ module Girl
|
|
1120
1120
|
domain = domain_port[ 0...colon_idx ]
|
1121
1121
|
port = domain_port[ ( colon_idx + 1 )..-1 ].to_i
|
1122
1122
|
|
1123
|
-
if ( domain !~ /^[0-
|
1123
|
+
if ( domain !~ /^(?=^.{3,255}$)[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$/ ) || ( domain =~ /^((0\.\d{1,3}\.\d{1,3}\.\d{1,3})|(10\.\d{1,3}\.\d{1,3}\.\d{1,3})|(127\.\d{1,3}\.\d{1,3}\.\d{1,3})|(169\.254\.\d{1,3}\.\d{1,3})|(172\.((1[6-9])|(2\d)|(3[01]))\.\d{1,3}\.\d{1,3})|(192\.168\.\d{1,3}\.\d{1,3})|(255\.255\.255\.255)|(localhost))$/ ) then
|
1124
1124
|
# 忽略非法域名,内网地址
|
1125
1125
|
puts "ignore #{ domain }"
|
1126
1126
|
return
|
@@ -1348,7 +1348,7 @@ module Girl
|
|
1348
1348
|
data = data[ written..-1 ]
|
1349
1349
|
p2_info[ :wbuff ] = data
|
1350
1350
|
bytesize = p2_info[ :wbuff ].bytesize
|
1351
|
-
|
1351
|
+
|
1352
1352
|
if p2_info[ :overflowing ] && ( bytesize < RESUME_BELOW ) then
|
1353
1353
|
proxy = im_info[ :proxy ]
|
1354
1354
|
p2_id = p2_info[ :p2_id ]
|
@@ -1396,7 +1396,7 @@ module Girl
|
|
1396
1396
|
proxy_info[ :paused_dsts ].each{ | dst | add_read( dst ) }
|
1397
1397
|
proxy_info[ :paused_dsts ].clear
|
1398
1398
|
end
|
1399
|
-
|
1399
|
+
|
1400
1400
|
if proxy_info[ :paused_p2s ].any? then
|
1401
1401
|
puts "proxy underhalf resume p2s #{ im } #{ proxy_info[ :paused_p2s ].size }"
|
1402
1402
|
proxy_info[ :paused_p2s ].each{ | p2 | add_read( p2 ) }
|
data/lib/girl/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: girl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 9.1.
|
4
|
+
version: 9.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- takafan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-03-
|
11
|
+
date: 2024-03-12 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: escape evil.
|
14
14
|
email:
|