xmpp-fingerprint.lua

Thu, 18 Feb 2010 16:02:11 +0000

author
Matthew Wild <mwild1@gmail.com>
date
Thu, 18 Feb 2010 16:02:11 +0000
changeset 0
ba1cc6ad649d
child 2
1eabe33d7af7
permissions
-rwxr-xr-x

Initial commit (dedicated to darkrain)

0
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 #!/usr/bin/env lua
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3 local socket = require "socket";
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5 -- Defaults --
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6 default_port = 5222;
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7 default_namespace = "jabber:client";
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8 default_timeout = 1.5;
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10 -- Print debug output --
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11 function debug() end -- Keep debug output quiet by default
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
12
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13 -- Command-line flag handlers --
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14 local flags = {};
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 function flags.d() -- Show debug
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 debug = print;
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17 end
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19 function flags.s() -- Use s2s
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20 -- Use s2s
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21 default_port = 5269;
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22 default_namespace = "jabber:server";
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
23 end
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
25 function flags.t(arg)
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
26 default_timeout = tonumber(arg[1] or 1);
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
27 return 1;
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
28 end
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
29
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
30 -- Process flags --
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
31 local function process_args(arg)
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
32 local f = arg[1] and arg[1]:match("^%-(%S+)");
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
33 if f then
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
34 table.remove(arg, 1);
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
35 if flags[f] then
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
36 local used = flags[f](arg);
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
37 if used then
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
38 for i=1,used do
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
39 table.remove(arg, 1);
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
40 end
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
41 end
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
42 end
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
43 return process_args(arg);
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
44 end
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
45 end
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
46 process_args(arg);
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
47
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
48 local received_cache = {};
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
49 local function _test(server, port, question, answer)
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
50 local received = received_cache[question];
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
51 if not received then
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
52 debug("||", "Connecting to "..server..":"..port.."...");
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
53 local conn = assert(socket.connect(server, port), "Failed to connect to "..arg[1]);
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
54 conn:send(question);
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
55 debug(">>", tostring(question));
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
56 conn:settimeout(default_timeout);
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
57 local data, err, partial = conn:receive("*a");
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
58 received = data or partial or "";
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
59 conn:close();
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
60 received_cache[question] = received;
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
61 debug("<<", #received ~= "" and tostring(received) or nil);
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
62 end
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
63 return received ~= "" and received:match(answer);
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
64 end
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
65
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
66 function test(question, answer)
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
67 return _test(arg[1], tonumber(arg[2]) or default_port, question, answer);
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
68 end
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
69
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
70 function server_comment(comment)
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
71 table.insert(getfenv(2).server_comments, comment);
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
72 end
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
73
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
74 function literal(s)
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
75 return s:gsub("%p", "%%%1");
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
76 end
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
77
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
78 -----
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
79 q_invalid_xml = "abc\n";
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
80 q_empty_message_tag = "<message/>";
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
81 q_invalid_host = "<stream:stream xmlns='"..default_namespace.."' xmlns:stream='http://etherx.jabber.org/streams' version='1.0' id='abc' to='0.0.0.0'>";
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
82 -----
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
83
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
84 testers = {};
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
85
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
86 dofile "servers/ejabberd.lua"
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
87 dofile "servers/google_talk.lua"
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
88 dofile "servers/isode_mlink.lua"
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
89 dofile "servers/jabberd14.lua"
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
90 dofile "servers/jabberd2.lua"
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
91 dofile "servers/prosody.lua"
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
92 dofile "servers/tigase.lua"
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
93 dofile "servers/djabberd.lua"
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
94 dofile "servers/openfire.lua"
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
95 dofile "servers/jabber_xcp.lua"
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
96
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
97 function test_fingerprint(server)
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
98 local tester = testers[server];
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
99 local env = setmetatable({server_comments = {}}, { __index = _G });
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
100 setfenv(tester, env);
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
101 local ok, err = pcall(tester);
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
102 if not ok then
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
103 print("Error while testing for "..server..": "..err);
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
104 end
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
105 return env;
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
106 end
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
107
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
108 ------------------------------------------------------------------
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
109
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
110 local results = {};
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
111 for server in pairs(testers) do
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
112 local res = test_fingerprint(server);
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
113 if res.server_name then
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
114 table.insert(results, res);
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
115 end
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
116 end
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
117
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
118 if #results > 1 then
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
119 print("Note... multiple matches, could be any:");
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
120 end
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
121
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
122 for _, result in ipairs(results) do
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
123 io.write(result.server_name);
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
124 if result.server_min_version then
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
125 io.write(", version "..result.server_min_version.." or later");
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
126 end
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
127 io.write("\n");
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
128 if #result.server_comments > 0 then
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
129 print(" Notes:\n", table.concat(result.server_comments, "\n "));
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
130 end
ba1cc6ad649d Initial commit (dedicated to darkrain)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
131 end

mercurial