girl 0.73.1 → 0.78.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/head.rb +0 -11
- data/lib/girl/proxy_worker.rb +42 -39
- data/lib/girl/proxyd_worker.rb +36 -22
- data/lib/girl/version.rb +1 -1
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cb6d635f9fb525291d4b0c32b749245255a52234ff9b850add473b430aa5e732
|
4
|
+
data.tar.gz: c336934bd1fd8825f72e65fdcc9dd708788f53bec7a175a37228ec724b970869
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 81f96a6e78ddf2cf00ff331002b145871eca5b72653bf822d42943858f887be4e996fa47a98e18313800d2a461899280fa6db6eff3781daa3d714b5e54a489dd
|
7
|
+
data.tar.gz: 29aaac2d5eae5d9889dcc033048929ff8fffac95c422b5322467ba8859df664097a600e14e9c26ac30e2babadc79463b05d32969565b176f990a52c708dbda80
|
data/lib/girl/head.rb
CHANGED
@@ -30,21 +30,10 @@ module Girl
|
|
30
30
|
RESERVED_ROUTE = <<EOF
|
31
31
|
0.0.0.0/8
|
32
32
|
10.0.0.0/8
|
33
|
-
100.64.0.0/10
|
34
33
|
127.0.0.0/8
|
35
34
|
169.254.0.0/16
|
36
35
|
172.16.0.0/12
|
37
|
-
192.0.0.0/24
|
38
|
-
192.0.2.0/24
|
39
|
-
192.31.196.0/24
|
40
|
-
192.52.193.0/24
|
41
|
-
192.88.99.0/24
|
42
36
|
192.168.0.0/16
|
43
|
-
192.175.48.0/24
|
44
|
-
198.18.0.0/15
|
45
|
-
198.51.100.0/24
|
46
|
-
203.0.113.0/24
|
47
|
-
240.0.0.0/4
|
48
37
|
255.255.255.255/32
|
49
38
|
EOF
|
50
39
|
end
|
data/lib/girl/proxy_worker.rb
CHANGED
@@ -113,7 +113,7 @@ module Girl
|
|
113
113
|
|
114
114
|
@tun_info[ :src_exts ].each do | src_id, src_ext |
|
115
115
|
if src_ext[ :src ].closed? && ( now - src_ext[ :last_continue_at ] > EXPIRE_AFTER )
|
116
|
-
puts "p#{ Process.pid } #{ Time.new } expire src ext #{
|
116
|
+
puts "p#{ Process.pid } #{ Time.new } expire src ext #{ src_ext[ :destination_domain ] }"
|
117
117
|
del_src_ext( src_id )
|
118
118
|
end
|
119
119
|
end
|
@@ -124,7 +124,7 @@ module Girl
|
|
124
124
|
|
125
125
|
@src_infos.each do | src, src_info |
|
126
126
|
if now - src_info[ :last_continue_at ] > EXPIRE_AFTER
|
127
|
-
puts "p#{ Process.pid } #{ Time.new } expire src"
|
127
|
+
puts "p#{ Process.pid } #{ Time.new } expire src #{ src_info[ :destination_domain ] }"
|
128
128
|
set_is_closing( src )
|
129
129
|
need_trigger = true
|
130
130
|
end
|
@@ -393,27 +393,29 @@ module Girl
|
|
393
393
|
new_a_tun
|
394
394
|
end
|
395
395
|
|
396
|
+
src_info = @src_infos[ src ]
|
397
|
+
src_id = src_info[ :id ]
|
398
|
+
destination_port = src_info[ :destination_port ]
|
399
|
+
destination_domain = src_info[ :destination_domain ]
|
400
|
+
|
396
401
|
src_ext = {
|
397
|
-
src: src,
|
398
|
-
dst_port: nil,
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
402
|
+
src: src, # src
|
403
|
+
dst_port: nil, # 远端dst端口
|
404
|
+
destination_domain: destination_domain, # 目的地域名
|
405
|
+
wmems: {}, # 写后 pack_id => data
|
406
|
+
send_ats: {}, # 上一次发出时间 pack_id => send_at
|
407
|
+
relay_pack_id: 0, # 转发到几
|
408
|
+
continue_dst_pack_id: 0, # 收到几
|
409
|
+
pieces: {}, # 跳号包 dst_pack_id => data
|
410
|
+
is_dst_closed: false, # dst是否已关闭
|
411
|
+
biggest_dst_pack_id: 0, # dst最大包号码
|
412
|
+
completed_pack_id: 0, # 完成到几(对面收到几)
|
413
|
+
last_continue_at: Time.new # 上一次发生流量的时间
|
408
414
|
}
|
409
415
|
|
410
|
-
src_info = @src_infos[ src ]
|
411
|
-
src_id = src_info[ :id ]
|
412
416
|
@tun_info[ :src_exts ][ src_id ] = src_ext
|
413
417
|
src_info[ :proxy_type ] = :tunnel
|
414
418
|
|
415
|
-
destination_port = src_info[ :destination_port ]
|
416
|
-
destination_domain = src_info[ :destination_domain ]
|
417
419
|
destination_domain_port = [ destination_domain, destination_port ].join( ':' )
|
418
420
|
data = [ [ 0, A_NEW_SOURCE, src_id ].pack( 'Q>CQ>' ), @custom.encode( destination_domain_port ) ].join
|
419
421
|
loop_send_a_new_source( src_ext, data )
|
@@ -599,6 +601,23 @@ module Girl
|
|
599
601
|
end
|
600
602
|
end
|
601
603
|
|
604
|
+
##
|
605
|
+
# send data
|
606
|
+
#
|
607
|
+
def send_data( tun, data, to_addr )
|
608
|
+
begin
|
609
|
+
tun.sendmsg( data, 0, to_addr )
|
610
|
+
rescue IO::WaitWritable, Errno::EINTR
|
611
|
+
return false
|
612
|
+
rescue Errno::EHOSTUNREACH, Errno::ENETUNREACH, Errno::ENETDOWN => e
|
613
|
+
puts "#{ Time.new } #{ e.class }, close tun"
|
614
|
+
close_tun( tun )
|
615
|
+
return false
|
616
|
+
end
|
617
|
+
|
618
|
+
true
|
619
|
+
end
|
620
|
+
|
602
621
|
##
|
603
622
|
# close src
|
604
623
|
#
|
@@ -835,13 +854,7 @@ module Girl
|
|
835
854
|
while @tun_info[ :ctlmsgs ].any?
|
836
855
|
to_addr, data = @tun_info[ :ctlmsgs ].first
|
837
856
|
|
838
|
-
|
839
|
-
tun.sendmsg( data, 0, to_addr )
|
840
|
-
rescue IO::WaitWritable, Errno::EINTR
|
841
|
-
return
|
842
|
-
rescue Errno::EHOSTUNREACH, Errno::ENETUNREACH => e
|
843
|
-
puts "#{ Time.new } #{ e.class }, close tun"
|
844
|
-
close_tun( tun )
|
857
|
+
unless send_data( tun, data, to_addr )
|
845
858
|
return
|
846
859
|
end
|
847
860
|
|
@@ -857,15 +870,11 @@ module Girl
|
|
857
870
|
data = src_ext[ :wmems ][ pack_id ]
|
858
871
|
|
859
872
|
if data
|
860
|
-
|
861
|
-
tun.sendmsg( data, 0, @tun_info[ :tund_addr ] )
|
862
|
-
rescue IO::WaitWritable, Errno::EINTR
|
863
|
-
return
|
864
|
-
rescue Errno::EHOSTUNREACH, Errno::ENETUNREACH => e
|
865
|
-
puts "#{ Time.new } #{ e.class }, close tun"
|
866
|
-
close_tun( tun )
|
873
|
+
unless send_data( tun, data, @tun_info[ :tund_addr ] )
|
867
874
|
return
|
868
875
|
end
|
876
|
+
|
877
|
+
src_ext[ :last_continue_at ] = now
|
869
878
|
end
|
870
879
|
end
|
871
880
|
|
@@ -929,13 +938,7 @@ module Girl
|
|
929
938
|
|
930
939
|
data = [ [ pack_id, src_id ].pack( 'Q>Q>' ), data ].join
|
931
940
|
|
932
|
-
|
933
|
-
tun.sendmsg( data, 0, @tun_info[ :tund_addr ] )
|
934
|
-
rescue IO::WaitWritable, Errno::EINTR
|
935
|
-
return
|
936
|
-
rescue Errno::EHOSTUNREACH, Errno::ENETUNREACH => e
|
937
|
-
puts "#{ Time.new } #{ e.class }, close tun"
|
938
|
-
close_tun( tun )
|
941
|
+
unless send_data( tun, data, @tun_info[ :tund_addr ] )
|
939
942
|
return
|
940
943
|
end
|
941
944
|
|
@@ -966,7 +969,7 @@ module Girl
|
|
966
969
|
return
|
967
970
|
end
|
968
971
|
|
969
|
-
id = rand( ( 2 ** 64 ) -
|
972
|
+
id = rand( ( 2 ** 64 ) - 2 ) + 1
|
970
973
|
# puts "debug1 accept a src #{ addrinfo.inspect } #{ id }"
|
971
974
|
|
972
975
|
@src_infos[ src ] = {
|
data/lib/girl/proxyd_worker.rb
CHANGED
@@ -112,7 +112,7 @@ module Girl
|
|
112
112
|
|
113
113
|
tund_info[ :dst_exts ].each do | dst_local_port, dst_ext |
|
114
114
|
if dst_ext[ :dst ].closed? && ( now - dst_ext[ :last_continue_at ] > EXPIRE_AFTER )
|
115
|
-
puts "p#{ Process.pid } #{ Time.new } expire dst ext #{
|
115
|
+
puts "p#{ Process.pid } #{ Time.new } expire dst ext #{ dst_ext[ :domain_port ] }"
|
116
116
|
del_dst_ext( tund, dst_local_port )
|
117
117
|
end
|
118
118
|
end
|
@@ -264,17 +264,18 @@ module Girl
|
|
264
264
|
tund_info = @tund_infos[ tund ]
|
265
265
|
tund_info[ :dst_local_ports ][ src_id ] = local_port
|
266
266
|
tund_info[ :dst_exts ][ local_port ] = {
|
267
|
-
dst: dst,
|
268
|
-
src_id: src_id,
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
267
|
+
dst: dst, # dst
|
268
|
+
src_id: src_id, # 近端src id
|
269
|
+
domain_port: destination_domain_port, # 域名和端口
|
270
|
+
wmems: {}, # 写后 pack_id => data
|
271
|
+
send_ats: {}, # 上一次发出时间 pack_id => send_at
|
272
|
+
relay_pack_id: 0, # 转发到几
|
273
|
+
continue_src_pack_id: 0, # 收到几
|
274
|
+
pieces: {}, # 跳号包 src_pack_id => data
|
275
|
+
is_src_closed: false, # src是否已关闭
|
276
|
+
biggest_src_pack_id: 0, # src最大包号码
|
277
|
+
completed_pack_id: 0, # 完成到几(对面收到几)
|
278
|
+
last_continue_at: Time.new # 上一次发生流量的时间
|
278
279
|
}
|
279
280
|
|
280
281
|
data = [ 0, PAIRED, src_id, local_port ].pack( 'Q>CQ>n' )
|
@@ -414,6 +415,23 @@ module Girl
|
|
414
415
|
end
|
415
416
|
end
|
416
417
|
|
418
|
+
##
|
419
|
+
# send data
|
420
|
+
#
|
421
|
+
def send_data( tund, data, to_addr )
|
422
|
+
begin
|
423
|
+
tund.sendmsg( data, 0, to_addr )
|
424
|
+
rescue IO::WaitWritable, Errno::EINTR
|
425
|
+
return false
|
426
|
+
rescue Errno::EHOSTUNREACH, Errno::ENETUNREACH, Errno::ENETDOWN => e
|
427
|
+
puts "#{ Time.new } #{ e.class }, close tund"
|
428
|
+
close_tund( tund )
|
429
|
+
return false
|
430
|
+
end
|
431
|
+
|
432
|
+
true
|
433
|
+
end
|
434
|
+
|
417
435
|
##
|
418
436
|
# close dst
|
419
437
|
#
|
@@ -591,6 +609,7 @@ module Girl
|
|
591
609
|
# write tund
|
592
610
|
#
|
593
611
|
def write_tund( tund )
|
612
|
+
now = Time.new
|
594
613
|
tund_info = @tund_infos[ tund ]
|
595
614
|
|
596
615
|
if tund_info[ :is_closing ]
|
@@ -602,9 +621,7 @@ module Girl
|
|
602
621
|
while tund_info[ :ctlmsgs ].any?
|
603
622
|
data = tund_info[ :ctlmsgs ].first
|
604
623
|
|
605
|
-
|
606
|
-
tund.sendmsg( data, 0, tund_info[ :tun_addr ] )
|
607
|
-
rescue IO::WaitWritable, Errno::EINTR
|
624
|
+
unless send_data( tund, data, tund_info[ :tun_addr ] )
|
608
625
|
return
|
609
626
|
end
|
610
627
|
|
@@ -620,11 +637,11 @@ module Girl
|
|
620
637
|
data = dst_ext[ :wmems ][ pack_id ]
|
621
638
|
|
622
639
|
if data
|
623
|
-
|
624
|
-
tund.sendmsg( data, 0, tund_info[ :tun_addr ] )
|
625
|
-
rescue IO::WaitWritable, Errno::EINTR
|
640
|
+
unless send_data( tund, data, tund_info[ :tun_addr ] )
|
626
641
|
return
|
627
642
|
end
|
643
|
+
|
644
|
+
dst_ext[ :last_continue_at ] = now
|
628
645
|
end
|
629
646
|
end
|
630
647
|
|
@@ -688,14 +705,11 @@ module Girl
|
|
688
705
|
|
689
706
|
data = [ [ pack_id, dst_local_port ].pack( 'Q>n' ), data ].join
|
690
707
|
|
691
|
-
|
692
|
-
tund.sendmsg( data, 0, tund_info[ :tun_addr ] )
|
693
|
-
rescue IO::WaitWritable, Errno::EINTR
|
708
|
+
unless send_data( tund, data, tund_info[ :tun_addr ] )
|
694
709
|
return
|
695
710
|
end
|
696
711
|
|
697
712
|
# puts "debug2 written pack #{ pack_id }"
|
698
|
-
now = Time.new
|
699
713
|
dst_ext[ :relay_pack_id ] = pack_id
|
700
714
|
dst_ext[ :wmems ][ pack_id ] = data
|
701
715
|
dst_ext[ :send_ats ][ pack_id ] = now
|
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.78.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-
|
11
|
+
date: 2020-08-21 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: while internet is evil, here's a girl.
|
14
14
|
email:
|
@@ -49,8 +49,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
49
49
|
- !ruby/object:Gem::Version
|
50
50
|
version: '0'
|
51
51
|
requirements: []
|
52
|
-
|
53
|
-
rubygems_version: 2.7.6.2
|
52
|
+
rubygems_version: 3.1.2
|
54
53
|
signing_key:
|
55
54
|
specification_version: 4
|
56
55
|
summary: 妹子
|