girl 0.89.0 → 0.90.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.rb +12 -17
- data/lib/girl/proxy_worker.rb +42 -63
- data/lib/girl/proxyd_worker.rb +18 -26
- 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: 2e1916068595360e4ab83189c93759e2c6ed05979d4a4128ff83f95390e91dce
|
4
|
+
data.tar.gz: 9f39d67731002186f66f04e4bb463834980a243fc0d6322b5e35f749fa356f95
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 18e61543e05ae79c31ee76a8504cfcfef1271aa1419430ae667b46c8291dcc790630aa1123bc662ce817117a26b68ac343f5c7679134a3205548f32ba28cfb31
|
7
|
+
data.tar.gz: 797fa163ab50c3ace753ac833381bdeb040876c12de7d2b5570dbe0f3a799a91b18fa220ca5ea4ecbc8cfad69aabbd1dd245ad1bcd404b92423020890f5d38d1
|
data/lib/girl/proxy.rb
CHANGED
@@ -22,24 +22,19 @@ Q>: 0 ctlmsg -> C: 1 tund port -> n: tund port -> n: tcpd port
|
|
22
22
|
|
23
23
|
tun-tund:
|
24
24
|
|
25
|
-
Q>: 0 ctlmsg -> C: 2 heartbeat
|
26
|
-
3 a new source
|
27
|
-
4 paired
|
28
|
-
5 dest status
|
29
|
-
6 source status
|
30
|
-
7 miss
|
31
|
-
8 fin1
|
32
|
-
9 confirm fin1
|
33
|
-
10 fin2
|
34
|
-
11 confirm fin2
|
25
|
+
Q>: 0 ctlmsg -> C: 2 heartbeat [not use]
|
26
|
+
3 a new source -> Q>: src id -> encoded destination address
|
27
|
+
4 paired -> Q>: src id -> n: dst id
|
28
|
+
5 dest status [not use]
|
29
|
+
6 source status [not use]
|
30
|
+
7 miss [not use]
|
31
|
+
8 fin1 [not use]
|
32
|
+
9 confirm fin1 [not use]
|
33
|
+
10 fin2 [not use]
|
34
|
+
11 confirm fin2 [not use]
|
35
35
|
12 tund fin
|
36
36
|
13 tun fin
|
37
37
|
14 tun ip changed
|
38
|
-
15 single miss not use
|
39
|
-
16 range miss not use
|
40
|
-
17 continue not use
|
41
|
-
18 is resend ready not use
|
42
|
-
19 resend ready not use
|
43
38
|
=end
|
44
39
|
|
45
40
|
module Girl
|
@@ -84,14 +79,14 @@ module Girl
|
|
84
79
|
|
85
80
|
if direct_path then
|
86
81
|
raise "not found direct file #{ direct_path }" unless File.exist?( direct_path )
|
87
|
-
directs = ( RESERVED_ROUTE.split( "\n" ) + IO.binread( direct_path ).split( "\n" ) ).map
|
82
|
+
directs = ( RESERVED_ROUTE.split( "\n" ) + IO.binread( direct_path ).split( "\n" ) ).map{ | line | IPAddr.new( line.strip ) }
|
88
83
|
end
|
89
84
|
|
90
85
|
remotes = []
|
91
86
|
|
92
87
|
if remote_path then
|
93
88
|
raise "not found remote file #{ remote_path }" unless File.exist?( remote_path )
|
94
|
-
remotes = IO.binread( remote_path ).split( "\n" ).map
|
89
|
+
remotes = IO.binread( remote_path ).split( "\n" ).map{ | line | line.strip }
|
95
90
|
end
|
96
91
|
|
97
92
|
unless im then
|
data/lib/girl/proxy_worker.rb
CHANGED
@@ -7,7 +7,6 @@ module Girl
|
|
7
7
|
def initialize( proxy_port, proxyd_host, proxyd_port, directs, remotes, im )
|
8
8
|
@proxyd_host = proxyd_host
|
9
9
|
@proxyd_addr = Socket.sockaddr_in( proxyd_port, proxyd_host )
|
10
|
-
@proxyd_ip = Addrinfo.new( @proxyd_addr ).ip_address
|
11
10
|
@directs = directs
|
12
11
|
@remotes = remotes
|
13
12
|
@custom = Girl::ProxyCustom.new( im )
|
@@ -588,22 +587,16 @@ module Girl
|
|
588
587
|
tun.bind( Socket.sockaddr_in( 0, '0.0.0.0' ) )
|
589
588
|
port = tun.local_address.ip_port
|
590
589
|
tun_info = {
|
591
|
-
port: port,
|
592
|
-
pending_sources: [],
|
593
|
-
ctlmsgs: [],
|
594
|
-
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
|
599
|
-
|
600
|
-
|
601
|
-
created_at: Time.new, # 创建时间
|
602
|
-
last_recv_at: nil, # 上一次收到流量的时间
|
603
|
-
last_sent_at: nil, # 上一次发出流量的时间
|
604
|
-
sender_addrs: nil, # 远端发送者地址
|
605
|
-
last_ping_senders_at: nil, # 上一次ping发送者的时间
|
606
|
-
closing: false # 是否准备关闭
|
590
|
+
port: port, # 端口
|
591
|
+
pending_sources: [], # 还没配上tund,暂存的src
|
592
|
+
ctlmsgs: [], # [ ctlmsg, to_addr ]
|
593
|
+
tund_addr: nil, # tund地址
|
594
|
+
tcpd_addr: nil, # tcpd地址
|
595
|
+
srcs: {}, # src_id => src
|
596
|
+
created_at: Time.new, # 创建时间
|
597
|
+
last_recv_at: nil, # 上一次收到流量的时间
|
598
|
+
last_sent_at: nil, # 上一次发出流量的时间
|
599
|
+
closing: false # 是否准备关闭
|
607
600
|
}
|
608
601
|
|
609
602
|
@tun = tun
|
@@ -701,27 +694,6 @@ module Girl
|
|
701
694
|
add_read( src )
|
702
695
|
end
|
703
696
|
|
704
|
-
##
|
705
|
-
# send data
|
706
|
-
#
|
707
|
-
def send_data( data, to_addr = nil )
|
708
|
-
unless to_addr then
|
709
|
-
to_addr = @tun_info[ :tund_addr ]
|
710
|
-
end
|
711
|
-
|
712
|
-
begin
|
713
|
-
written = @tun.sendmsg_nonblock( data, 0, to_addr )
|
714
|
-
rescue IO::WaitWritable, Errno::EINTR
|
715
|
-
print '.'
|
716
|
-
return :wait
|
717
|
-
rescue Errno::EHOSTUNREACH, Errno::ENETUNREACH, Errno::ENETDOWN => e
|
718
|
-
puts "#{ Time.new } sendmsg #{ e.class }, close tun"
|
719
|
-
return :fatal
|
720
|
-
end
|
721
|
-
|
722
|
-
written
|
723
|
-
end
|
724
|
-
|
725
697
|
##
|
726
698
|
# set dst closing
|
727
699
|
#
|
@@ -856,24 +828,24 @@ module Girl
|
|
856
828
|
# puts "debug1 accept a src #{ addrinfo.inspect } #{ src_id }"
|
857
829
|
|
858
830
|
@src_infos[ src ] = {
|
859
|
-
id: src_id,
|
860
|
-
proxy_proto: :uncheck,
|
861
|
-
proxy_type: :uncheck,
|
862
|
-
destination_domain: nil,
|
863
|
-
destination_port: nil,
|
864
|
-
is_connect: true,
|
865
|
-
rbuff: '',
|
866
|
-
|
867
|
-
|
868
|
-
|
869
|
-
|
870
|
-
created_at: Time.new,
|
871
|
-
last_recv_at: nil,
|
872
|
-
last_sent_at: nil,
|
873
|
-
paused: false,
|
874
|
-
closing: false,
|
875
|
-
closing_read: false,
|
876
|
-
closing_write: false
|
831
|
+
id: src_id, # id
|
832
|
+
proxy_proto: :uncheck, # :uncheck / :http / :socks5
|
833
|
+
proxy_type: :uncheck, # :uncheck / :checking / :direct / :tunnel / :negotiation
|
834
|
+
destination_domain: nil, # 目的地域名
|
835
|
+
destination_port: nil, # 目的地端口
|
836
|
+
is_connect: true, # 代理协议是http的场合,是否是CONNECT
|
837
|
+
rbuff: '', # 读到的流量
|
838
|
+
dst: nil, # :direct的场合,对应的dst
|
839
|
+
stream: nil, # :tunnel的场合,对应的stream
|
840
|
+
dst_id: nil, # 远端dst id
|
841
|
+
wbuff: '', # 从dst/stream读到的流量
|
842
|
+
created_at: Time.new, # 创建时间
|
843
|
+
last_recv_at: nil, # 上一次收到新流量(由dst收到,或者由stream收到)的时间
|
844
|
+
last_sent_at: nil, # 上一次发出流量(由dst发出,或者由stream发出)的时间
|
845
|
+
paused: false, # 是否已暂停
|
846
|
+
closing: false, # 准备关闭
|
847
|
+
closing_read: false, # 准备关闭读
|
848
|
+
closing_write: false # 准备关闭写
|
877
849
|
}
|
878
850
|
|
879
851
|
add_read( src, :src )
|
@@ -1200,15 +1172,17 @@ module Girl
|
|
1200
1172
|
# 发ctlmsg
|
1201
1173
|
while @tun_info[ :ctlmsgs ].any? do
|
1202
1174
|
data, to_addr = @tun_info[ :ctlmsgs ].first
|
1203
|
-
sent = send_data( data, to_addr )
|
1204
1175
|
|
1205
|
-
|
1206
|
-
|
1207
|
-
|
1208
|
-
|
1209
|
-
# puts "debug1 #{ Time.new } wait send ctlmsg left #{ @tun_info[ :ctlmsgs ].size }"
|
1176
|
+
begin
|
1177
|
+
@tun.sendmsg_nonblock( data, 0, to_addr )
|
1178
|
+
rescue IO::WaitWritable, Errno::EINTR
|
1179
|
+
puts "p#{ Process.pid } #{ Time.new } wait send ctlmsg, left #{ @tun_info[ :ctlmsgs ].size }"
|
1210
1180
|
@tun_info[ :last_sent_at ] = now
|
1211
1181
|
return
|
1182
|
+
rescue Errno::EHOSTUNREACH, Errno::ENETUNREACH, Errno::ENETDOWN => e
|
1183
|
+
puts "p#{ Process.pid } #{ Time.new } sendmsg #{ e.class }, close tun"
|
1184
|
+
close_tun( tun )
|
1185
|
+
return
|
1212
1186
|
end
|
1213
1187
|
|
1214
1188
|
@tun_info[ :ctlmsgs ].shift
|
@@ -1326,12 +1300,17 @@ module Girl
|
|
1326
1300
|
rescue Exception => e
|
1327
1301
|
# puts "debug1 write dst #{ e.class }"
|
1328
1302
|
close_write_dst( dst )
|
1329
|
-
close_read_src( src )
|
1303
|
+
close_read_src( src )
|
1330
1304
|
return
|
1331
1305
|
end
|
1332
1306
|
|
1333
1307
|
data = data[ written..-1 ]
|
1334
1308
|
dst_info[ :wbuff ] = data
|
1309
|
+
|
1310
|
+
unless src.closed? then
|
1311
|
+
src_info = @src_infos[ src ]
|
1312
|
+
src_info[ :last_sent_at ] = Time.new
|
1313
|
+
end
|
1335
1314
|
end
|
1336
1315
|
|
1337
1316
|
##
|
data/lib/girl/proxyd_worker.rb
CHANGED
@@ -100,15 +100,6 @@ module Girl
|
|
100
100
|
add_write( @proxyd )
|
101
101
|
end
|
102
102
|
|
103
|
-
##
|
104
|
-
# add ctlmsg resend ready
|
105
|
-
#
|
106
|
-
def add_ctlmsg_resend_ready( tund )
|
107
|
-
tund_info = @tund_infos[ tund ]
|
108
|
-
data = [ 0, RESEND_READY ].pack( 'Q>C' )
|
109
|
-
add_ctlmsg( tund, data )
|
110
|
-
end
|
111
|
-
|
112
103
|
##
|
113
104
|
# add ctlmsg
|
114
105
|
#
|
@@ -473,9 +464,9 @@ module Girl
|
|
473
464
|
begin
|
474
465
|
written = sock.sendmsg_nonblock( data, 0, to_addr )
|
475
466
|
rescue IO::WaitWritable, Errno::EINTR
|
476
|
-
print '.'
|
477
467
|
return :wait
|
478
468
|
rescue Errno::EHOSTUNREACH, Errno::ENETUNREACH, Errno::ENETDOWN => e
|
469
|
+
puts "p#{ Process.pid } #{ Time.new } sendmsg #{ e.class }"
|
479
470
|
return :fatal
|
480
471
|
end
|
481
472
|
|
@@ -577,20 +568,20 @@ module Girl
|
|
577
568
|
add_read( tcpd, :tcpd )
|
578
569
|
|
579
570
|
tund_info = {
|
580
|
-
port: tund_port,
|
581
|
-
tcpd: tcpd,
|
582
|
-
tcpd_port: tcpd_port,
|
583
|
-
ctlmsgs: [],
|
584
|
-
tun_addr: from_addr,
|
585
|
-
dsts: {},
|
586
|
-
dst_ids: {},
|
587
|
-
created_at: Time.new,
|
588
|
-
last_recv_at: nil,
|
589
|
-
last_sent_at: nil,
|
590
|
-
closing: false,
|
591
|
-
closing_read: false,
|
592
|
-
closing_write: false,
|
593
|
-
changed_tun_addr: nil
|
571
|
+
port: tund_port, # 端口
|
572
|
+
tcpd: tcpd, # 对应的tcpd
|
573
|
+
tcpd_port: tcpd_port, # tcpd端口
|
574
|
+
ctlmsgs: [], # [ ctlmsg, to_addr ]
|
575
|
+
tun_addr: from_addr, # tun地址
|
576
|
+
dsts: {}, # dst_id => dst
|
577
|
+
dst_ids: {}, # src_id => dst_id
|
578
|
+
created_at: Time.new, # 创建时间
|
579
|
+
last_recv_at: nil, # 上一次收到流量的时间
|
580
|
+
last_sent_at: nil, # 上一次发出流量的时间
|
581
|
+
closing: false, # 准备关闭
|
582
|
+
closing_read: false, # 准备关闭读
|
583
|
+
closing_write: false, # 准备关闭写
|
584
|
+
changed_tun_addr: nil # 记录到和tun addr不符的来源地址
|
594
585
|
}
|
595
586
|
|
596
587
|
@tunneling_tunds[ from_addr ] = tund
|
@@ -722,7 +713,7 @@ module Girl
|
|
722
713
|
dst_info[ :rbuff ] << data
|
723
714
|
|
724
715
|
if dst_info[ :rbuff ].bytesize >= WBUFF_LIMIT then
|
725
|
-
# puts "debug1 dst.rbuff full
|
716
|
+
# puts "debug1 dst.rbuff full"
|
726
717
|
set_dst_closing( dst )
|
727
718
|
end
|
728
719
|
end
|
@@ -800,6 +791,7 @@ module Girl
|
|
800
791
|
sent = send_data( proxyd, data, to_addr )
|
801
792
|
|
802
793
|
if sent == :wait then
|
794
|
+
puts "p#{ Process.pid } #{ Time.new } wait proxyd send ctlmsg, left #{ @proxyd_info[ :ctlmsgs ].size }"
|
803
795
|
return
|
804
796
|
else
|
805
797
|
@proxyd_info[ :ctlmsgs ].shift
|
@@ -837,7 +829,7 @@ module Girl
|
|
837
829
|
close_tund( tund )
|
838
830
|
return
|
839
831
|
elsif sent == :wait then
|
840
|
-
|
832
|
+
puts "p#{ Process.pid } #{ Time.new } wait tund #{ tund_info[ :port ] } send ctlmsg, left #{ tund_info[ :ctlmsgs ].size }"
|
841
833
|
tund_info[ :last_sent_at ] = now
|
842
834
|
return
|
843
835
|
end
|
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: 0.
|
4
|
+
version: 0.90.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- takafan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-10-
|
11
|
+
date: 2020-10-11 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: escape evil.
|
14
14
|
email:
|