girl 4.7.0 → 4.8.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of girl might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/lib/girl/proxy_worker.rb +1 -1
- data/lib/girl/proxyd_worker.rb +1 -1
- data/lib/girl/relay_worker.rb +28 -17
- data/lib/girl/resolvd_worker.rb +16 -13
- data/lib/girl/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 944b2055e93c9751113af05107dce4dc040bb40a41602388350c292af2286e0b
|
4
|
+
data.tar.gz: 71c9b4cb592f41750a5f21d751afeb4d13be0b2c20da2f10eb0df42a8cfbe2fd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8a01d46a18c169d0d4773168379b0aa1106157872554444d166156dbaf7d55966d8f941561754d5e506c91d098383bf419ad42a8cd59432dc0270e7f879dc355
|
7
|
+
data.tar.gz: a9ed3e588404a191c0c7b38abdb1ec3573af2139022258dd9f2ee469ce6ad335b21ab5595002638d73946130535b6f92ac8c7bb429da7cd3c5b005e1dffdb3f8
|
data/lib/girl/proxy_worker.rb
CHANGED
@@ -700,7 +700,7 @@ module Girl
|
|
700
700
|
@ctl = ctl
|
701
701
|
add_read( ctl, :ctl )
|
702
702
|
|
703
|
-
ctld_port = @proxyd_port +
|
703
|
+
ctld_port = @proxyd_port + 10.times.to_a.sample
|
704
704
|
ctld_addr = Socket.sockaddr_in( ctld_port, @proxyd_host )
|
705
705
|
@ctl_info = {
|
706
706
|
ctld_addr: ctld_addr, # ctld地址
|
data/lib/girl/proxyd_worker.rb
CHANGED
@@ -514,7 +514,7 @@ module Girl
|
|
514
514
|
# new ctlds
|
515
515
|
#
|
516
516
|
def new_ctlds( proxyd_port )
|
517
|
-
|
517
|
+
10.times do | i |
|
518
518
|
ctld_port = proxyd_port + i
|
519
519
|
ctld = Socket.new( Socket::AF_INET, Socket::SOCK_DGRAM, 0 )
|
520
520
|
ctld.setsockopt( Socket::SOL_SOCKET, Socket::SO_REUSEPORT, 1 )
|
data/lib/girl/relay_worker.rb
CHANGED
@@ -6,10 +6,10 @@ module Girl
|
|
6
6
|
#
|
7
7
|
def initialize( resolv_port, nameserver, resolvd_port, redir_port, proxyd_host, proxyd_port, directs, remotes, im )
|
8
8
|
@nameserver_addr = Socket.sockaddr_in( 53, nameserver )
|
9
|
-
@
|
9
|
+
@resolvd_ports = 10.times.map { | i | resolvd_port + i }
|
10
10
|
@qnames = remotes.map { | dom | dom.split( '.' ).map{ | sub | [ sub.size ].pack( 'C' ) + sub }.join }
|
11
11
|
@proxyd_host = proxyd_host
|
12
|
-
@
|
12
|
+
@proxyd_port = proxyd_port
|
13
13
|
@directs = directs
|
14
14
|
@remotes = remotes
|
15
15
|
@custom = Girl::ProxyCustom.new( im )
|
@@ -444,8 +444,7 @@ module Girl
|
|
444
444
|
return if src.closed?
|
445
445
|
src_info = @src_infos[ src ]
|
446
446
|
|
447
|
-
if (
|
448
|
-
|| ( ( ip_info.ip_address == @proxyd_host ) && ( src_info[ :destination_port ] == @proxyd_port ) ) then
|
447
|
+
if ( @ip_address_list.any? { | addrinfo | addrinfo.ip_address == ip_info.ip_address } ) && ( src_info[ :destination_port ] == @redir_port ) then
|
449
448
|
puts "p#{ Process.pid } #{ Time.new } ignore #{ ip_info.ip_address }:#{ src_info[ :destination_port ] }"
|
450
449
|
add_closing_src( src )
|
451
450
|
return
|
@@ -522,8 +521,7 @@ module Girl
|
|
522
521
|
|
523
522
|
if now - last_recv_at >= EXPIRE_CTL then
|
524
523
|
puts "p#{ Process.pid } #{ Time.new } expire ctl #{ EXPIRE_CTL }"
|
525
|
-
|
526
|
-
next_tick
|
524
|
+
set_ctl_closing
|
527
525
|
end
|
528
526
|
end
|
529
527
|
|
@@ -650,6 +648,7 @@ module Girl
|
|
650
648
|
|
651
649
|
if resend >= RESEND_LIMIT then
|
652
650
|
@ctl_info[ :resends ].delete( key )
|
651
|
+
set_ctl_closing
|
653
652
|
break
|
654
653
|
end
|
655
654
|
|
@@ -715,7 +714,10 @@ module Girl
|
|
715
714
|
@ctl = ctl
|
716
715
|
add_read( ctl, :ctl )
|
717
716
|
|
717
|
+
ctld_port = @proxyd_port + 10.times.to_a.sample
|
718
|
+
ctld_addr = Socket.sockaddr_in( ctld_port, @proxyd_host )
|
718
719
|
@ctl_info = {
|
720
|
+
ctld_addr: ctld_addr, # ctld地址
|
719
721
|
resends: ConcurrentHash.new, # key => count
|
720
722
|
atund_addr: nil, # atund地址,src->dst
|
721
723
|
btund_addr: nil, # btund地址,dst->src
|
@@ -725,7 +727,7 @@ module Girl
|
|
725
727
|
}
|
726
728
|
|
727
729
|
hello = @custom.hello
|
728
|
-
puts "p#{ Process.pid } #{ Time.new } hello i'm #{ hello.inspect }"
|
730
|
+
puts "p#{ Process.pid } #{ Time.new } hello i'm #{ hello.inspect } #{ ctld_port }"
|
729
731
|
key = [ HELLO ].pack( 'C' )
|
730
732
|
add_ctlmsg( key, hello )
|
731
733
|
end
|
@@ -769,7 +771,7 @@ module Girl
|
|
769
771
|
|
770
772
|
if @qnames.any? { | qname | data.include?( qname ) } then
|
771
773
|
data = @custom.encode( data )
|
772
|
-
to_addr = @
|
774
|
+
to_addr = Socket.sockaddr_in( @resolvd_ports.sample, @proxyd_host )
|
773
775
|
else
|
774
776
|
to_addr = @nameserver_addr
|
775
777
|
end
|
@@ -881,7 +883,7 @@ module Girl
|
|
881
883
|
data = @custom.encode( data )
|
882
884
|
|
883
885
|
begin
|
884
|
-
@ctl.sendmsg( data, 0, @
|
886
|
+
@ctl.sendmsg( data, 0, @ctl_info[ :ctld_addr ] )
|
885
887
|
@ctl_info[ :last_sent_at ] = Time.new
|
886
888
|
rescue Exception => e
|
887
889
|
puts "p#{ Process.pid } #{ Time.new } sendmsg #{ e.class }"
|
@@ -889,6 +891,17 @@ module Girl
|
|
889
891
|
end
|
890
892
|
end
|
891
893
|
|
894
|
+
##
|
895
|
+
# send data
|
896
|
+
#
|
897
|
+
def send_data( sock, to_addr, data )
|
898
|
+
begin
|
899
|
+
sock.sendmsg( data, 0, to_addr )
|
900
|
+
rescue Exception => e
|
901
|
+
puts "p#{ Process.pid } #{ Time.new } sendmsg to #{ to_addr.ip_unpack.inspect } #{ e.class }"
|
902
|
+
end
|
903
|
+
end
|
904
|
+
|
892
905
|
##
|
893
906
|
# set atun closing
|
894
907
|
#
|
@@ -902,14 +915,12 @@ module Girl
|
|
902
915
|
end
|
903
916
|
|
904
917
|
##
|
905
|
-
#
|
918
|
+
# set ctl closing
|
906
919
|
#
|
907
|
-
def
|
908
|
-
|
909
|
-
|
910
|
-
|
911
|
-
puts "p#{ Process.pid } #{ Time.new } sendmsg to #{ to_addr.ip_unpack.inspect } #{ e.class }"
|
912
|
-
end
|
920
|
+
def set_ctl_closing
|
921
|
+
return if @ctl.closed?
|
922
|
+
@ctl_info[ :closing ] = true
|
923
|
+
next_tick
|
913
924
|
end
|
914
925
|
|
915
926
|
##
|
@@ -1015,7 +1026,7 @@ module Girl
|
|
1015
1026
|
data, addrinfo, rflags, *controls = rsv.recvmsg
|
1016
1027
|
# puts "debug rsv recvmsg #{ addrinfo.ip_unpack.inspect } #{ data.inspect }"
|
1017
1028
|
|
1018
|
-
if addrinfo.
|
1029
|
+
if addrinfo.ip_address == @proxyd_host then
|
1019
1030
|
data = @custom.decode( data )
|
1020
1031
|
end
|
1021
1032
|
|
data/lib/girl/resolvd_worker.rb
CHANGED
@@ -16,7 +16,7 @@ module Girl
|
|
16
16
|
dotr, dotw = IO.pipe
|
17
17
|
@dotw = dotw
|
18
18
|
add_read( dotr, :dotr )
|
19
|
-
|
19
|
+
new_resolvds( resolvd_port )
|
20
20
|
end
|
21
21
|
|
22
22
|
##
|
@@ -111,13 +111,14 @@ module Girl
|
|
111
111
|
##
|
112
112
|
# new a dst
|
113
113
|
#
|
114
|
-
def new_a_dst( src_addr, data )
|
114
|
+
def new_a_dst( resolvd, src_addr, data )
|
115
115
|
dst = Socket.new( Socket::AF_INET, Socket::SOCK_DGRAM, 0 )
|
116
116
|
dst.setsockopt( Socket::SOL_SOCKET, Socket::SO_REUSEPORT, 1 )
|
117
117
|
dst.bind( Socket.sockaddr_in( 0, '0.0.0.0' ) )
|
118
118
|
|
119
119
|
puts "p#{ Process.pid } #{ Time.new } new a dst"
|
120
120
|
@dst_infos[ dst ] = {
|
121
|
+
resolvd: resolvd,
|
121
122
|
src_addr: src_addr,
|
122
123
|
created_at: Time.new
|
123
124
|
}
|
@@ -126,16 +127,18 @@ module Girl
|
|
126
127
|
end
|
127
128
|
|
128
129
|
##
|
129
|
-
# new
|
130
|
+
# new resolvds
|
130
131
|
#
|
131
|
-
def
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
132
|
+
def new_resolvds( resolvd_port )
|
133
|
+
10.times do
|
134
|
+
resolvd = Socket.new( Socket::AF_INET, Socket::SOCK_DGRAM, 0 )
|
135
|
+
resolvd.setsockopt( Socket::SOL_SOCKET, Socket::SO_REUSEPORT, 1 )
|
136
|
+
resolvd.bind( Socket.sockaddr_in( resolvd_port, '0.0.0.0' ) )
|
137
|
+
|
138
|
+
puts "p#{ Process.pid } #{ Time.new } resolvd bind on #{ resolvd_port }"
|
139
|
+
add_read( resolvd, :resolvd )
|
140
|
+
resolvd_port += 1
|
141
|
+
end
|
139
142
|
end
|
140
143
|
|
141
144
|
##
|
@@ -177,7 +180,7 @@ module Girl
|
|
177
180
|
data, addrinfo, rflags, *controls = resolvd.recvmsg
|
178
181
|
# puts "debug1 resolvd recvmsg #{ addrinfo.ip_unpack.inspect } #{ data.inspect }"
|
179
182
|
data = @custom.decode( data )
|
180
|
-
new_a_dst( addrinfo.to_sockaddr, data )
|
183
|
+
new_a_dst( resolvd, addrinfo.to_sockaddr, data )
|
181
184
|
end
|
182
185
|
|
183
186
|
##
|
@@ -188,7 +191,7 @@ module Girl
|
|
188
191
|
# puts "debug1 dst recvmsg #{ addrinfo.ip_unpack.inspect } #{ data.inspect }"
|
189
192
|
dst_info = @dst_infos[ dst ]
|
190
193
|
data = @custom.encode( data )
|
191
|
-
send_data(
|
194
|
+
send_data( dst_info[ :resolvd ], dst_info[ :src_addr ], data )
|
192
195
|
close_dst( dst )
|
193
196
|
end
|
194
197
|
|
data/lib/girl/version.rb
CHANGED