win | wireshark | 在win上跑lua脚本 解析数据包

文章讲述了如何在Linux下配置Wireshark使用Lua脚本来解析数据包,包括放置lua文件、打开pcap文件,以及提供了一个intparse_request_line函数示例,用于解析HTTP请求行并检测请求的完整性。

前提说明:之前是在linux 系统上配置的,然后现在 在配置lua 脚本 ,然后 分析指定协议 的 数据包

其实流程也比较简单,但 逻辑需要缕清来

首先要把你 预先准备的 xxx.lua 文件放到wireshark 的安装文件中,(我就是之前装过,然后不太确定是在哪个目录 wireshark 里头有好多目录)
在这里插入图片描述
参考:

dofile(DATA_DIR.."xxx.lua")

接着就可以通过wireshark 打开已经抓的包(文件格式 yyy.pcap),开始愉快的解析数据啦

参考

//BAD_REQUEST 语法错误
//NO_REQUEST 请求不完整
int parse_request_line(char *text)
{
    m_url = strpbrk(text, " \t");   //找到 第一处空格 或者 \t
    if (!m_url)
    {
        return BAD_REQUEST;
    }
    //用\0空字符来划分每一行具体信息 
    //方便后续操作 因为字符串函数都以空字符作为划分
    *m_url++ = '\0';
 
    char *method = text;
    if (strcasecmp(method, "GET") == 0)
        m_method = GET;
    else if (strcasecmp(method, "POST") == 0)
        m_method = POST;
    else
        return BAD_REQUEST;
 
    m_url += strspn(m_url, " \t");      //跳过剩余的 空格和\t   因为可能不止用一个空格和\t来分隔
    m_version = strpbrk(m_url, " \t");
    if (!m_version)
        return BAD_REQUEST;
    *m_version++ = '\0';
 
    m_version += strspn(m_version, " \t");
    //到此为止 m_url、m_version都指向对应位置的开头
 
    //仅支持HTTP//1.1
    if (strcasecmp(m_version, "HTTP/1.1") != 0)
        return BAD_REQUEST;
 
    //对请求资源前7个字符进行判断
    //这里主要是有些报文的请求资源中会带有http://,这里需要对这种情况进行单独处理
    if (strncasecmp(m_url, "http://", 7) == 0)
    {
        m_url += 7;
        m_url = strchr(m_url, '/');
    }
    //同样增加https情况
    if (strncasecmp(m_url, "https://", 8) == 0)
    {
        m_url += 8;
        m_url = strchr(m_url, '/');
    }
    //一般的不会带有上述两种符号,直接是单独的/或/后面带访问资源
    if (!m_url || m_url[0] != '/')
        return BAD_REQUEST;
 
    //当url为/时,显示判断界面
    if (strlen(m_url) == 1)
        strcat(m_url, "judge.html");
		
    return NO_REQUEST;
}

######################################################################
更新
参考1

### 使用 Wireshark Lua 脚本解析 UDP 数据包的方法 在使用 Wireshark 进行网络协议分析时,可以通过 Lua 脚本来扩展其功能并实现自定义解析。以下是一个解析 UDP 数据包的示例方法及代码。 #### 1. 创建 Lua 脚本 首先需要编写一个 Lua 脚本解析 UDP 数据包Lua 脚本可以访问 Wireshark 的 API 来解析特定协议的数据。以下是一个简单的示例脚本: ```lua -- 定义一个新的协议 local myproto = Proto("myproto", "My Custom Protocol") -- 定义字段 local f_message = ProtoField.string("myproto.message", "Message", base.ASCII) myproto.fields = {f_message} -- 解析函数 function myproto.dissector(buffer, pinfo, tree) -- 设置协议名称 pinfo.cols.protocol = "MYPROTO" -- 检查是否有足够的数据 if buffer:len() == 0 then return end -- 提取消息内容(假设消息从第1字节开始) local message = buffer(0):string() -- 在树视图中添加字段 local subtree = tree:add(myproto, buffer(), "My Protocol Data") subtree:add(f_message, message) end -- 注册 UDP 端口 local udp_port = DissectorTable.get("udp.port") udp_port:add(12345, myproto) -- 假设监听的端口为 12345 ``` 此脚本定义了一个新的协议,并将其绑定到指定的 UDP 端口[^1]。当 Wireshark 捕获到目标端口的 UDP 数据包时,将调用该脚本进行解析。 #### 2. 将 Lua 脚本添加到 Wireshark 完成脚本编写后,需要将其放置在正确的目录下以便 Wireshark 加载。根据操作系统的不同,路径可能有所不同: - **Linux**: `~/.local/lib/wireshark/plugins` 或 `~/.wireshark/plugins` - **Windows**: `C:\Program Files\Wireshark\plugins`[^2] #### 3. 测试与调试 启动 Wireshark 并捕获网络流量。确保目标设备正在发送 UDP 数据包至指定端口(如示例中的 12345)。如果一切正常,Wireshark 将显示由 Lua 脚本解析的自定义字段。 #### 注意事项 - 确保 Lua 脚本中的端口号与实际通信使用的端口号一致。 - 如果需要解析更复杂的协议,可以进一步扩展脚本逻辑,例如解析二进制数据或处理多层嵌套结构[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值