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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e06e25ddc6594959cceb39bd5d4ad420941dfaeec6866a86d7817e974cf9bc2f
4
- data.tar.gz: 6d8016cd3a42b0cf611bad16759e34f130f193bb9e68a88f5f8b80597bd62dc9
3
+ metadata.gz: 944b2055e93c9751113af05107dce4dc040bb40a41602388350c292af2286e0b
4
+ data.tar.gz: 71c9b4cb592f41750a5f21d751afeb4d13be0b2c20da2f10eb0df42a8cfbe2fd
5
5
  SHA512:
6
- metadata.gz: d1d49eddf9232d1af3cbf4d9426a257cdaf48003fe9a1b08fdca5b1caaba5497eda97b3092b49191c228868026d70843839ac711b1a70201832901062caeecf8
7
- data.tar.gz: aa1f7dc236106913f5ea2c061fd5b54c7675da04e0db71fc2d200f1665213c8c33b5ed78a4959111453b19189562d0ba233cbf3cc71e32fb3575e7199050b77f
6
+ metadata.gz: 8a01d46a18c169d0d4773168379b0aa1106157872554444d166156dbaf7d55966d8f941561754d5e506c91d098383bf419ad42a8cd59432dc0270e7f879dc355
7
+ data.tar.gz: a9ed3e588404a191c0c7b38abdb1ec3573af2139022258dd9f2ee469ce6ad335b21ab5595002638d73946130535b6f92ac8c7bb429da7cd3c5b005e1dffdb3f8
@@ -700,7 +700,7 @@ module Girl
700
700
  @ctl = ctl
701
701
  add_read( ctl, :ctl )
702
702
 
703
- ctld_port = @proxyd_port + 5.times.to_a.sample
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地址
@@ -514,7 +514,7 @@ module Girl
514
514
  # new ctlds
515
515
  #
516
516
  def new_ctlds( proxyd_port )
517
- 5.times do | i |
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 )
@@ -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
- @resolvd_addr = Socket.sockaddr_in( resolvd_port, proxyd_host )
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
- @proxyd_addr = Socket.sockaddr_in( proxyd_port, proxyd_host )
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 ( ( @ip_address_list.any? { | addrinfo | addrinfo.ip_address == ip_info.ip_address } ) && ( src_info[ :destination_port ] == @redir_port ) ) \
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
- @ctl_info[ :closing ] = true
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 = @resolvd_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, @proxyd_addr )
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
- # send data
918
+ # set ctl closing
906
919
  #
907
- def send_data( sock, to_addr, data )
908
- begin
909
- sock.sendmsg( data, 0, to_addr )
910
- rescue Exception => e
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.to_sockaddr == @resolvd_addr then
1029
+ if addrinfo.ip_address == @proxyd_host then
1019
1030
  data = @custom.decode( data )
1020
1031
  end
1021
1032
 
@@ -16,7 +16,7 @@ module Girl
16
16
  dotr, dotw = IO.pipe
17
17
  @dotw = dotw
18
18
  add_read( dotr, :dotr )
19
- new_a_resolvd( resolvd_port )
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 a resolvd
130
+ # new resolvds
130
131
  #
131
- def new_a_resolvd( resolvd_port )
132
- resolvd = Socket.new( Socket::AF_INET, Socket::SOCK_DGRAM, 0 )
133
- resolvd.setsockopt( Socket::SOL_SOCKET, Socket::SO_REUSEPORT, 1 )
134
- resolvd.bind( Socket.sockaddr_in( resolvd_port, '0.0.0.0' ) )
135
-
136
- puts "p#{ Process.pid } #{ Time.new } resolvd bind on #{ resolvd_port }"
137
- add_read( resolvd, :resolvd )
138
- @resolvd = resolvd
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( @resolvd, dst_info[ :src_addr ], 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
@@ -1,3 +1,3 @@
1
1
  module Girl
2
- VERSION = '4.7.0'.freeze
2
+ VERSION = '4.8.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: girl
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.7.0
4
+ version: 4.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - takafan