aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Wild <mwild1@gmail.com>2013-05-17 14:53:51 +0100
committerMatthew Wild <mwild1@gmail.com>2013-05-17 14:53:51 +0100
commite082db3cf78c91b937a996cae2c71511df616e84 (patch)
tree509beaf4882130e8f8debec822975776533f4a91
parent4d630bbd3cb0478ca5b90f0d27d6b801751c4472 (diff)
downloadprosody-e082db3cf78c91b937a996cae2c71511df616e84.tar.gz
prosody-e082db3cf78c91b937a996cae2c71511df616e84.zip
util.ip: Add 'private' method/property to determine whether an IP address is generally expected to be internet-routeable (YMMV)
-rw-r--r--util/ip.lua15
1 files changed, 15 insertions, 0 deletions
diff --git a/util/ip.lua b/util/ip.lua
index 9e668d1b..6ebc023b 100644
--- a/util/ip.lua
+++ b/util/ip.lua
@@ -193,5 +193,20 @@ function ip_methods:scope()
return value;
end
+function ip_methods:private()
+ local private = self.scope ~= 0xE;
+ if not private and self.proto == "IPv4" then
+ local ip = self.addr;
+ local fields = {};
+ ip:gsub("([^.]*).?", function (c) fields[#fields + 1] = tonumber(c) end);
+ if fields[1] == 127 or fields[1] == 10 or (fields[1] == 192 and fields[2] == 168)
+ or (fields[1] == 172 and (fields[2] >= 16 or fields[2] <= 32)) then
+ private = true;
+ end
+ end
+ self.private = private;
+ return private;
+end
+
return {new_ip = new_ip,
commonPrefixLength = commonPrefixLength};