aboutsummaryrefslogtreecommitdiff
path: root/bin/wireshark.lua
blob: 273355c20e63afa52dc27283d17dee7cb28abceb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
-- declare our protocol
gwlan_proto = Proto("gnunet","Gnunet Layer")
-- create a function to dissect it
local f = gwlan_proto.fields

f.len = ProtoField.uint16 ("gnunet.len", "Gnunet Message Len")
f.type = ProtoField.uint16 ("gnunet.type", "Gnunet Message Type")
-- rhs_proto.fields.sequence = ProtoField.uint16("rhs.sequence","Sequence number")
f.proto = DissectorTable.new("gnunet.proto", "Gnunet Protocoll", FT_UINT16, BASE_DEC)
--gwlan_proto.fields = {f_len, f_type}

function gwlan_proto.dissector(buffer,pinfo,tree)
	pinfo.cols.protocol = "Gnunet Packet"
	local subtree = tree:add(gwlan_proto, buffer(),"Gnunet Data (" .. buffer:len() .. ")")
	local len = buffer(0,2)
	local type = buffer(2,2)
	subtree:add(buffer(0,2), "Len: " .. buffer(0,2):uint())
	subtree:add(buffer(2,2), "Type: " .. buffer(2,2):uint())
	if (len:uint() > 5) then
		if (len:uint() <= buffer:len()) then
			f.proto:try(type:uint(), buffer(0, len:uint()):tvb(), pinfo, subtree)
		end
		if (len:uint() < buffer:len()) then
			gwlan_proto.dissector(buffer(len:uint(),buffer:len() - len:uint()):tvb(),pinfo,tree)
		end
	end
end

function gwlan_proto.init()
end

-- load the udp.port table
llc_table = DissectorTable.get("llc.dsap")
-- register our protocol to handle llc.dsap 0x1e
llc_table:add(31,gwlan_proto)

fragmentack = Proto("gnunet.fragmentack","Gnunet Fragment Ack")

function fragmentack.dissector(buffer,pinfo,tree)
    	pinfo.cols.protocol = "Gnunet Fragment ack"
    	tree:add(fragment,buffer(),"Gnunet Data ack")
    	tree:add(buffer(4,4),"fragment_id: " .. buffer(4,4):uint())
    	tree:add(buffer(8,12),"bits: " .. buffer(8,12):uint())
end

fragment = Proto("gnunet.fragment","Gnunet Fragment")

function fragment.dissector(buffer,pinfo,tree)
    	pinfo.cols.protocol = "Gnunet Fragment"
    	tree:add(fragment,buffer(),"Gnunet Fragment")
    	tree:add(buffer(4,4),"fragment_id: " .. buffer(4,4):uint())
	tree:add(buffer(8,2),"total_size: " .. buffer(8,2):uint())
	tree:add(buffer(10,2),"offset: " .. buffer(10,2):uint())
	tree:add(buffer(12), "Data: " .. buffer(12))
end

hello = Proto("gnunet.hello","Gnunet Hello Message")

function hello.dissector(buffer,pinfo,tree)
    	pinfo.cols.protocol = "Gnunet Hello Message"
    	tree:add(fragment,buffer(),"Gnunet Hello Message")
    	tree:add(buffer(4,4),"reserved: " .. buffer(4,4):uint())
	RsaPublicKeyBinaryEncoded(buffer(8 , buffer:len() -8):tvb(),pinfo, tree)
end


function RsaPublicKeyBinaryEncoded(buffer,pinfo,tree)
    	local subtree = tree:add(gwlan_proto,buffer(),"Gnunet RsaPublicKeyBinaryEncoded(" .. buffer:len() .. ")")
    	subtree:add(buffer(0,2),"len: " .. buffer(0,2):uint())
	subtree:add(buffer(2,2),"sizen: " .. buffer(2,2):uint())
	subtree:add(buffer(4,258),"Pub Key: " .. buffer(4,258))
	subtree:add(buffer(262,2),"pedding: " .. buffer(262,2):uint())
end

f.proto:add(19,fragmentack)
f.proto:add(18,fragment)
f.proto:add(16,hello)