aboutsummaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorDavid Brodski <david@brodski.eu>2011-10-26 13:29:09 +0000
committerDavid Brodski <david@brodski.eu>2011-10-26 13:29:09 +0000
commitb461cab1c09a8dba5d1430ae67344aca52a8c5c4 (patch)
treec1c3e7e82652db5cab043d01fd2f40e85f4bac51 /bin
parent151cacabd28ce4b171e833db6651321c13af8f22 (diff)
downloadgnunet-b461cab1c09a8dba5d1430ae67344aca52a8c5c4.tar.gz
gnunet-b461cab1c09a8dba5d1430ae67344aca52a8c5c4.zip
More protocols implemented
Diffstat (limited to 'bin')
-rw-r--r--bin/wireshark.lua133
1 files changed, 103 insertions, 30 deletions
diff --git a/bin/wireshark.lua b/bin/wireshark.lua
index 273355c20..ac77029f6 100644
--- a/bin/wireshark.lua
+++ b/bin/wireshark.lua
@@ -6,27 +6,48 @@ local f = gwlan_proto.fields
6f.len = ProtoField.uint16 ("gnunet.len", "Gnunet Message Len") 6f.len = ProtoField.uint16 ("gnunet.len", "Gnunet Message Len")
7f.type = ProtoField.uint16 ("gnunet.type", "Gnunet Message Type") 7f.type = ProtoField.uint16 ("gnunet.type", "Gnunet Message Type")
8-- rhs_proto.fields.sequence = ProtoField.uint16("rhs.sequence","Sequence number") 8-- rhs_proto.fields.sequence = ProtoField.uint16("rhs.sequence","Sequence number")
9f.proto = DissectorTable.new("gnunet.proto", "Gnunet Protocoll", FT_UINT16, BASE_DEC) 9f_proto = DissectorTable.new("gnunet.proto", "Gnunet Protocoll", FT_UINT16, BASE_DEC)
10--gwlan_proto.fields = {f_len, f_type} 10--gwlan_proto.fields = {f_len, f_type}
11 11
12function gwlan_proto.dissector(buffer,pinfo,tree) 12function gwlan_proto.dissector(buffer,pinfo,tree)
13 pinfo.cols.protocol = "Gnunet Packet" 13 pinfo.cols.protocol = "Gnunet Packet"
14 local subtree = tree:add(gwlan_proto, buffer(),"Gnunet Data (" .. buffer:len() .. ")") 14 gnunet_packet_disector(buffer,pinfo,tree)
15 local len = buffer(0,2) 15end
16 local type = buffer(2,2) 16
17 subtree:add(buffer(0,2), "Len: " .. buffer(0,2):uint()) 17function gwlan_proto.init()
18 subtree:add(buffer(2,2), "Type: " .. buffer(2,2):uint()) 18end
19 if (len:uint() > 5) then 19
20 if (len:uint() <= buffer:len()) then 20function gnunet_packet_disector(buffer,pinfo,tree)
21 f.proto:try(type:uint(), buffer(0, len:uint()):tvb(), pinfo, subtree) 21 if (buffer:len() > 4) then
22 local len = buffer(0,2):uint()
23 local type = buffer(2,2):uint()
24 if (len <= buffer:len()) then
25 local dissect = f_proto:get_dissector(type)
26 if dissect ~= nil then
27 dissect:call(buffer(0, len):tvb(), pinfo, tree)
28 else
29 local subtree = tree:add(fragmentack, buffer(),"Gnunet Packet Type: " .. buffer(2,2):uint() .. "(" .. buffer:len() .. ")")
30 gnunet_message_header(buffer, pinfo, subtree)
31 end
22 end 32 end
23 if (len:uint() < buffer:len()) then 33 --if (len < buffer:len()) then
24 gwlan_proto.dissector(buffer(len:uint(),buffer:len() - len:uint()):tvb(),pinfo,tree) 34 -- gwlan_proto.dissector(buffer(len, buffer:len() - len):tvb(), pinfo, tree)
35 --end
36 else
37 if (buffer:len() == 4) then
38 local subtree = tree:add(fragmentack, buffer(),"Gnunet Packet (" .. buffer:len() .. ")")
39 gnunet_message_header(buffer, pinfo, subtree)
25 end 40 end
26 end 41 end
27end 42end
28 43
29function gwlan_proto.init() 44function gnunet_message_header(buffer, pinfo, tree)
45 if (buffer:len() >= 4) then
46 local len = buffer(0,2)
47 local type = buffer(2,2)
48 tree:add(buffer(0,2), "Message Len: " .. buffer(0,2):uint())
49 tree:add(buffer(2,2), "Message Type: " .. buffer(2,2):uint())
50 end
30end 51end
31 52
32-- load the udp.port table 53-- load the udp.port table
@@ -37,41 +58,93 @@ llc_table:add(31,gwlan_proto)
37fragmentack = Proto("gnunet.fragmentack","Gnunet Fragment Ack") 58fragmentack = Proto("gnunet.fragmentack","Gnunet Fragment Ack")
38 59
39function fragmentack.dissector(buffer,pinfo,tree) 60function fragmentack.dissector(buffer,pinfo,tree)
40 pinfo.cols.protocol = "Gnunet Fragment ack" 61 pinfo.cols.protocol = "Gnunet Fragment Ack"
41 tree:add(fragment,buffer(),"Gnunet Data ack") 62 local subtree = tree:add(fragmentack, buffer(),"Gnunet Data ack (" .. buffer:len() .. ")")
42 tree:add(buffer(4,4),"fragment_id: " .. buffer(4,4):uint()) 63 gnunet_message_header(buffer, pinfo, subtree)
43 tree:add(buffer(8,12),"bits: " .. buffer(8,12):uint()) 64 if buffer:len() >= 16 then
65 subtree:add(buffer(4,4),"Fragment Id: " .. buffer(4,4):uint())
66 subtree:add(buffer(8,8),"Bits: " .. buffer(8,8))
67 end
44end 68end
45 69
46fragment = Proto("gnunet.fragment","Gnunet Fragment") 70fragment = Proto("gnunet.fragment","Gnunet Fragment")
47 71
48function fragment.dissector(buffer,pinfo,tree) 72function fragment.dissector(buffer,pinfo,tree)
49 pinfo.cols.protocol = "Gnunet Fragment" 73 pinfo.cols.protocol = "Gnunet Fragment"
50 tree:add(fragment,buffer(),"Gnunet Fragment") 74 local subtree = tree:add(fragment, buffer(),"Gnunet Fragment (" .. buffer:len() .. ")")
51 tree:add(buffer(4,4),"fragment_id: " .. buffer(4,4):uint()) 75 gnunet_message_header(buffer, pinfo, subtree)
52 tree:add(buffer(8,2),"total_size: " .. buffer(8,2):uint()) 76 if buffer:len() >= 13 then
53 tree:add(buffer(10,2),"offset: " .. buffer(10,2):uint()) 77 subtree:add(buffer(4,4),"Fragment Id: " .. buffer(4,4):uint())
54 tree:add(buffer(12), "Data: " .. buffer(12)) 78 subtree:add(buffer(8,2),"Total Size: " .. buffer(8,2):uint())
79 subtree:add(buffer(10,2),"Offset: " .. buffer(10,2):uint())
80 if buffer(10,2):uint() == 0 then
81 if (buffer(8,2):uint() <= buffer:len() - 12) then
82 gnunet_packet_disector(buffer(12):tvb(),pinfo,tree)
83 end
84 else
85 subtree:add(buffer(12), "Data: " .. buffer(12))
86 end
87 end
55end 88end
56 89
57hello = Proto("gnunet.hello","Gnunet Hello Message") 90hello = Proto("gnunet.hello","Gnunet Hello Message")
58 91
59function hello.dissector(buffer,pinfo,tree) 92function hello.dissector(buffer,pinfo,tree)
60 pinfo.cols.protocol = "Gnunet Hello Message" 93 pinfo.cols.protocol = "Gnunet Hello Message"
61 tree:add(fragment,buffer(),"Gnunet Hello Message") 94 local subtree = tree:add(hello, buffer(),"Gnunet Hello Message (" .. buffer:len() .. ")")
62 tree:add(buffer(4,4),"reserved: " .. buffer(4,4):uint()) 95 gnunet_message_header(buffer, pinfo, subtree)
63 RsaPublicKeyBinaryEncoded(buffer(8 , buffer:len() -8):tvb(),pinfo, tree) 96 if buffer:len() > (264 + 8) then
97 subtree:add(buffer(4,4),"Reserved: " .. buffer(4,4):uint())
98 RsaPublicKeyBinaryEncoded(buffer(8 , 264):tvb(),pinfo, subtree)
99 else
100 subtree:add(buffer(4), "SIZE WRONG (< 272)")
101 end
64end 102end
65 103
104wlan = Proto("gnunet.wlan","Gnunet WLAN Message")
105
106function wlan.dissector(buffer,pinfo,tree)
107 pinfo.cols.protocol = "Gnunet WLAN Message"
108 local subtree = tree:add(wlan, buffer(),"Gnunet WLAN Message (" .. buffer:len() .. ")")
109 gnunet_message_header(buffer, pinfo, subtree)
110 if buffer:len() > (4 + 4 + 2*64) then
111 subtree:add(buffer(4,4),"CRC: " .. buffer(4,4):uint())
112 local peer = GNUNET_PeerIdentity(buffer(8,64), pinfo, subtree)
113 peer:append_text(" Traget")
114 peer = GNUNET_PeerIdentity(buffer(8 + 64,64), pinfo, subtree)
115 peer:append_text(" Source")
116 else
117 subtree:add(buffer(8), "SIZE WRONG (< 4 + 4 + 2*64)")
118 end
119 if (buffer:len() - (4 + 4 + 2*64) > 0) then
120 gnunet_packet_disector(buffer(4 + 4 + 2*64):tvb(),pinfo,tree)
121 end
122end
66 123
67function RsaPublicKeyBinaryEncoded(buffer,pinfo,tree) 124function RsaPublicKeyBinaryEncoded(buffer,pinfo,tree)
68 local subtree = tree:add(gwlan_proto,buffer(),"Gnunet RsaPublicKeyBinaryEncoded(" .. buffer:len() .. ")") 125 local subtree = tree:add(gwlan_proto,buffer(),"Gnunet RsaPublicKeyBinaryEncoded(" .. buffer:len() .. ")")
69 subtree:add(buffer(0,2),"len: " .. buffer(0,2):uint()) 126 subtree:add(buffer(0,2),"Len: " .. buffer(0,2):uint())
70 subtree:add(buffer(2,2),"sizen: " .. buffer(2,2):uint()) 127 subtree:add(buffer(2,2),"Sizen: " .. buffer(2,2):uint())
71 subtree:add(buffer(4,258),"Pub Key: " .. buffer(4,258)) 128 subtree:add(buffer(4,258),"Pub Key: " .. buffer(4,258))
72 subtree:add(buffer(262,2),"pedding: " .. buffer(262,2):uint()) 129 subtree:add(buffer(262,2),"Padding: " .. buffer(262,2):uint())
130end
131
132function GNUNET_PeerIdentity(buffer,pinfo,tree)
133 local subtree = tree:add(gwlan_proto,buffer(),"Gnunet PeerIdentity(" .. buffer:len() .. ")")
134 subtree:add(buffer(0),"hashPubKey: " .. buffer(0))
135 return subtree
136end
137
138transport_session_keepalive = Proto("gnunet.transport_session_keepalive","Gnunet transport session keepalive")
139
140function transport_session_keepalive.dissector(buffer,pinfo,tree)
141 pinfo.cols.protocol = "Gnunet transport session keepalive"
142 local subtree = tree:add(transport_session_keepalive, buffer(),"Gnunet transport session keepalive (" .. buffer:len() .. ")")
143 gnunet_message_header(buffer, pinfo, subtree)
73end 144end
74 145
75f.proto:add(19,fragmentack) 146f_proto:add(43,wlan)
76f.proto:add(18,fragment) 147f_proto:add(39,transport_session_keepalive)
77f.proto:add(16,hello) 148f_proto:add(19,fragmentack)
149f_proto:add(18,fragment)
150f_proto:add(16,hello)