File tree Expand file tree Collapse file tree 1 file changed +26
-0
lines changed
Expand file tree Collapse file tree 1 file changed +26
-0
lines changed Original file line number Diff line number Diff line change @@ -31,6 +31,32 @@ def runDNSNoAscii : Async Unit := do
3131 unless infos.size > 0 do
3232 (throw <| IO.userError <| "No DNS results for google.com" : IO _)
3333
34+ let ipv4 := infos.filterMap (fun | .v4 e => some e | _ => none)
35+
36+ if let some head := ipv4[0 ]? then
37+ let parts : Vector UInt8 4 := head.octets
38+
39+ let isValid :=
40+ -- Not in 0.0.0.0/8 (current network)
41+ parts[0 ] != 0 &&
42+ -- Not in 10.0.0.0/8 (private)
43+ parts[0 ] != 10 &&
44+ -- Not in 127.0.0.0/8 (loopback)
45+ parts[0 ] != 127 &&
46+ -- Not in 169.254.0.0/16 (link-local)
47+ !(parts[0 ] == 169 && parts[1 ] == 254 ) &&
48+ -- Not in 172.16.0.0/12 (private)
49+ !(parts[0 ] == 172 && parts[1 ] >= 16 && parts[1 ] <= 31 ) &&
50+ -- Not in 192.168.0.0/16 (private)
51+ !(parts[0 ] == 192 && parts[1 ] == 168 ) &&
52+ -- Not in 224.0.0.0/4 (multicast)
53+ parts[0 ] < 224 &&
54+ -- Not 255.255.255.255 (broadcast)
55+ !(parts[0 ] == 255 && parts[1 ] == 255 && parts[2 ] == 255 && parts[3 ] == 255 )
56+
57+ unless isValid do
58+ throw <| IO.userError <| s! "Invalid IP address for google.com: { parts[0 ]} .{ parts[1 ]} .{ parts[2 ]} .{ parts[3 ]} "
59+
3460def runReverseDNS : Async Unit := do
3561 let result ← DNS.getNameInfo (.v4 ⟨.ofParts 8 8 8 8 , 53 ⟩)
3662 assertBEq result.service "domain"
You can’t perform that action at this time.
0 commit comments