gpt4 book ai didi

java - 使用 MySQL 读取 Netflow 数据包内容

转载 作者:行者123 更新时间:2023-11-30 00:11:22 25 4
gpt4 key购买 nike

我正在开发一个软件,可以从我拥有的虚拟机捕获通过我的防火墙(5.4 OpenBSD 虚拟机)的每个 udp 数据包,并将数据包保存在 MySQL 数据库中。

我的代码基本上是:

try
{
DatagramSocket serverSocket = new DatagramSocket(9876);
byte[] receiveData = new byte [1024];
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
String sentence = new String(receivePacket.getData());
InetAddress IPAddress = receivePacket.getAddress();
Connection conn = DriverManager.getConnection(url, user, password);
String sql = "INSERT INTO tabela_netflow (fluxo) values (?)";
PreparedStatement statement = conn.prepareStatement(sql);
statement.setBytes(1,receivePacket.getData());
int row = statement.executeUpdate();
if (row > 0)
{
System.out.println("Packet saved:" +receivePacket.getData());
}

} catch (SQLException ex)
{
ex.printStackTrace();
}

代码工作得很好,我的问题是,当我尝试查看数据库中保存的内容时,有很多奇怪的字符,因为它是二进制的(我认为),我无法读取它来获取我需要的信息(流量记录格式,可以查看here)

我的表非常简单:有两列,代码(int,自动增量)和另一列,fluxo(varbinary(10000))。这是当我在 MySQL Workbench 中单击“在编辑器中打开值”时看到的内容: Packet Content

最佳答案

NetFlow 5 数据报非常紧凑:每个字段只是一个数字。您最好在代码中对其进行解析,然后将带注释的字符串写入数据库或为 NetFlow 数据报中的每个字段添加数据库字段。

解析很简单:您只需计算字节数并将它们解释为整数或字符,具体取决于字段。

编辑:格式如下:Cisco Flow Record formats它们列出了字节偏移量,因此如果您想要 dOctets(根据您的描述,您确实需要),请获取有效负载的字节 20-24 并将它们转换为整数。

关于java - 使用 MySQL 读取 Netflow 数据包内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24017118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com