首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用tshark/wireshark显示pcap的每个数据包的flowid和帧号

如何使用tshark/wireshark显示pcap的每个数据包的flowid和帧号
EN

Stack Overflow用户
提问于 2012-10-20 09:03:41
回答 1查看 1.5K关注 0票数 2

是否有任何的流动id的概念?当我搜索过滤器时,我发现tcp.stream存在,但它与udp的等价,即udp.stream并不存在。当我打开pcap时,默认情况下它会显示帧号、ip地址、信息等。在一列中,我还需要每个数据包的流id和帧号。鲨鱼公司是否提供这种支持?如果没有,我有什么办法可以做到吗?

我已经写了一个程序,在这里我正在读取一个pcap,一个包一个包,我需要为每个包读取的流程。如果我使用t鲨命令作为

代码语言:javascript
运行
复制
 ./tshark -r in.pcap -z conv,tcp

它会显示数据包号和一些其他细节,但我希望流也显示出来,我可以在我的程序中阅读。

任何帮助都将不胜感激。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-23 11:52:43

wireshark中的tcp.stream

以下是wireshrak为获取tcp.stream所做的工作。Tcp分解器有一个全局变量guint32 tcp_stream_index;,然后是与会话关联的每个数据包。每个会话数据都存储在哈希表中(Wireshark使用GHashTable)。他们使用5元组作为密钥。如果他们得到了新的5元组,他们就会加入新的对话,并在那里增加tcp_stream_index:

代码语言:javascript
运行
复制
init_tcp_conversation_data(packet_info *pifo)
{
    ...
    tcpd->stream = tcp_stream_index++;
    ...
}

还有他们如何得到哈希:

代码语言:javascript
运行
复制
/*
 * Hash an address into a hash value (which must already have been set).
 */
#define ADD_ADDRESS_TO_HASH(hash_val, addr) { \
    const guint8 *ADD_ADDRESS_TO_HASH_data; \
    int ADD_ADDRESS_TO_HASH_index; \
    ADD_ADDRESS_TO_HASH_data = (addr)->data; \
    for (ADD_ADDRESS_TO_HASH_index = 0; \
         ADD_ADDRESS_TO_HASH_index < (addr)->len; \
         ADD_ADDRESS_TO_HASH_index++) \
         hash_val += ADD_ADDRESS_TO_HASH_data[ADD_ADDRESS_TO_HASH_index]; \
    }

...
hash_val = 0;
ADD_ADDRESS_TO_HASH(hash_val, &key->addr1);
hash_val += key->port1;
ADD_ADDRESS_TO_HASH(hash_val, &key->addr2);
hash_val += key->port2;
...

向数据包中添加flowid

下面是用lua编写的wireshark侦听器的一个简单示例。但是你需要函数mk_flowid,update_conversation_data,show_gathered_statics。

代码语言:javascript
运行
复制
local tap 

local conversations = {} 

local function packet(pinfo, tvb, userdata)
    local id = mk_flowid(pinfo.src, pinfo.src_port,
        pinfo.dst, pinfo.dst_port, pinfo.ipproto)

    local conv = converstaion[id]
    update_conversation_data(conv)

    -- Also you can output to a file
    -- to_file(pinfo.number, id)
end

local function draw(userdata)
    print_gathered_statistics(conversations)
end

local function reset(userdata)
    conversations = {}
end

local function show_myconv()
     tap = Listener.new()
     tap.packet = packet
     tap.draw = draw 
     tap.reset = reset 
end

register_stat_cmd_arg('myconv', show_myconv)

为了兰奇鲨鱼:

代码语言:javascript
运行
复制
tshark -X lua_script:myconv.lua -z myconv -r in.pcap
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12986919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档