LINUX.ORG.RU

Вывод определенного байта для каждого пакета в pcap файле

 , pcapng, , ,


1

2

Имеется pcap файл. Существует ли программа (типа tshark), которая бы для каждого пакета с полезной нагрузкой вывела бы len байт начиная с offset? Ну или на худой конец просто 1 байт находящийся по смещению offset относительно начала полезной нагрузки?

Сам tshark судя по всему так не умеет, либо я делаю это неправильно:

$ tshark -r dumpfile -n -T fields -e data.data[0] | hexdump -C
00000000  0a 0a 0a 0a 0a 0a 0a 0a  0a 0a 0a 0a 0a 0a 0a 0a  |................|
*
0000b350  0a 0a 0a 0a 0a 0a 0a 0a  0a 0a 0a                 |...........|
0000b35b

Сами байты не выводятся, зато после этого выводится отступ для каждого пакета в файле.

Гуглил, нашел такой же вопрос без ответа: http://ask.wireshark.org/questions/9441/how-to-use-tshark-to-print-certain-nu...

★★★★★

Напиши сам нужную скриптоту на любимом яп, формат pcap прост (man pcap-savefile).

d_a ★★★★★
()
Ответ на: комментарий от router

Сделал при помощи диссектора, хотя по-моему это уж слишком большой оверхед для того чтобы просто вывести определенное кол-во байт по определенному оффсету. Странно что tshark этого не умеет.

Lua код диссектора:

myproto = Proto ("MYPROTO", "My Protocol")

local f = myproto.fields

f.opcode = ProtoField.uint8 ("myproto.opcode", "Opcode", base.HEX)

function myproto.dissector(buf,pinfo,tree)
	if buf:len() == 0 then return end

	pinfo.cols.protocol = myproto.name

	local subtree = tree:add(myproto,buf(),myproto.description)
	subtree:add(f.opcode,buf(0,1))
end

udp_table = DissectorTable.get ("udp.port")
udp_table:add (1234, myproto)

Результат:

$ tshark -Xlua_script:/home/edigaryev/.wireshark/test.lua -r dumpfile -n -T fields -e myproto.opcode | head -n 4
0x01
0x01
0x02
0x03
edigaryev ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.