@@ -16,51 +16,54 @@ lazy_static::lazy_static! {
1616\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»""']))"# ) . unwrap( ) ;
1717
1818 /// Generic malicious / suspicious pattern keywords
19- pub static ref MALICIOUS_PATTERN_REGEX : Regex = Regex :: new( r"(?i)\b(powershell|cmd\.exe|Runtime\.getRuntime\(\)\.exec|ProcessBuilder|loadLibrary|socket\(|bind\(|connect\(|URL\(|URLConnection|Class\.forName|defineClass|getMethod|ldap|rmi )\b" ) . unwrap( ) ;
19+ pub static ref MALICIOUS_PATTERN_REGEX : Regex = Regex :: new( r"(?i)\b(powershell|cmd\.exe|Runtime\.getRuntime\(\)\.exec)\b" ) . unwrap( ) ;
2020
2121 /// Known "good" links / domains
22- pub static ref GOOD_LINKS : Vec <String > = vec![
23- "account.mojang.com" . to_string( ) ,
24- "aka.ms" . to_string( ) ,
25- "apache.org" . to_string( ) ,
26- "api.mojang.com" . to_string( ) ,
27- "api.spiget.org" . to_string( ) ,
28- "authserver.mojang.com" . to_string( ) ,
29- "bugs.mojang.com" . to_string( ) ,
30- "cabaletta/baritone" . to_string( ) ,
31- "ci.viaversion.com" . to_string( ) ,
32- "com/viaversion/" . to_string( ) ,
33- "docs.advntr.dev" . to_string( ) ,
34- "dominos.com" . to_string( ) ,
35- "dump.viaversion.com" . to_string( ) ,
36- "eclipse.org" . to_string( ) ,
37- "java.sun.org" . to_string( ) ,
38- "jo0001.github.io" . to_string( ) ,
39- "logging.apache.org" . to_string( ) ,
40- "login.live.com" . to_string( ) ,
41- "lwjgl.org" . to_string( ) ,
42- "minecraft.net" . to_string( ) ,
43- "minecraft.org" . to_string( ) ,
44- "minotar.net" . to_string( ) ,
45- "mojang.com" . to_string( ) ,
46- "netty.io" . to_string( ) ,
47- "optifine.net" . to_string( ) ,
48- "paulscode/sound/" . to_string( ) ,
49- "s.optifine.net" . to_string( ) ,
50- "sessionserver.mojang.com" . to_string( ) ,
51- "shader-tutorial.dev" . to_string( ) ,
52- "snoop.minecraft.net" . to_string( ) ,
53- "tools.ietf.org" . to_string( ) ,
54- "viaversion.com" . to_string( ) ,
55- "www.openssl.org" . to_string( ) ,
56- "www.rfc-editor.org" . to_string( ) ,
57- "www.slf4j.org" . to_string( ) ,
58- "www.w3.org" . to_string( ) ,
59- "yaml.org" . to_string( ) ,
60- "openssl.org" . to_string( ) ,
61- "yggdrasil-auth-session-staging.mojang.zone" . to_string( ) ,
62- "slf4j.org" . to_string( ) ,
63- ] ;
22+ pub static ref GOOD_LINKS : HashSet <String > = [
23+ "account.mojang.com" ,
24+ "aka.ms" ,
25+ "apache.org" ,
26+ "api.mojang.com" ,
27+ "api.spiget.org" ,
28+ "authserver.mojang.com" ,
29+ "bugs.mojang.com" ,
30+ "cabaletta/baritone" ,
31+ "ci.viaversion.com" ,
32+ "com/viaversion/" ,
33+ "docs.advntr.dev" ,
34+ "dominos.com" ,
35+ "dump.viaversion.com" ,
36+ "eclipse.org" ,
37+ "java.sun.org" ,
38+ "jo0001.github.io" ,
39+ "logging.apache.org" ,
40+ "login.live.com" ,
41+ "lwjgl.org" ,
42+ "minecraft.net" ,
43+ "minecraft.org" ,
44+ "minotar.net" ,
45+ "mojang.com" ,
46+ "netty.io" ,
47+ "optifine.net" ,
48+ "paulscode/sound/" ,
49+ "s.optifine.net" ,
50+ "sessionserver.mojang.com" ,
51+ "shader-tutorial.dev" ,
52+ "snoop.minecraft.net" ,
53+ "tools.ietf.org" ,
54+ "viaversion.com" ,
55+ "www.openssl.org" ,
56+ "www.rfc-editor.org" ,
57+ "www.slf4j.org" ,
58+ "www.w3.org" ,
59+ "yaml.org" ,
60+ "openssl.org" ,
61+ "yggdrasil-auth-session-staging.mojang.zone" ,
62+ "slf4j.org" ,
63+ ]
64+ . into_iter( )
65+ . map( str :: to_owned)
66+ . collect( ) ;
6467
6568 /// Known "good" / unreachable / reserved IPs and ranges
6669 pub static ref GOOD_IPS : HashSet <& ' static str > = {
@@ -140,3 +143,39 @@ pub fn is_known_good_ip(ip: &str) -> bool {
140143 }
141144 false
142145}
146+
147+ pub fn is_public_routable_ip ( ip : & str ) -> bool {
148+ match ip. parse :: < IpAddr > ( ) {
149+ Ok ( addr) => {
150+ if is_known_good_ip ( ip) {
151+ return false ;
152+ }
153+
154+ match addr {
155+ IpAddr :: V4 ( v4) => {
156+ !( v4. is_private ( )
157+ || v4. is_loopback ( )
158+ || v4. is_link_local ( )
159+ || v4. is_broadcast ( )
160+ || v4. is_documentation ( )
161+ || v4. is_multicast ( )
162+ || v4. is_unspecified ( ) )
163+ }
164+ IpAddr :: V6 ( v6) => {
165+ let segments = v6. segments ( ) ;
166+ let is_site_local = ( segments[ 0 ] & 0xffc0 ) == 0xfec0 ;
167+ let is_documentation = segments[ 0 ] == 0x2001 && segments[ 1 ] == 0x0db8 ;
168+
169+ !( v6. is_loopback ( )
170+ || v6. is_unspecified ( )
171+ || v6. is_unique_local ( )
172+ || v6. is_unicast_link_local ( )
173+ || is_site_local
174+ || is_documentation
175+ || v6. is_multicast ( ) )
176+ }
177+ }
178+ }
179+ Err ( _) => false ,
180+ }
181+ }
0 commit comments