我想捕获网络流量,并保存在我的数据库中的ASCII码,我仍然得到这个(它是数据库中不支持的字符?):
未处理的异常。代码=错误(1),消息=系统.数据. SQLite. SQLite异常(0x800007BF):SQL逻辑错误无法识别的标记:"#"位于系统.数据. SQLite.SQLite3.准备(SQLiteConnection cnn,字符串strSql,SQLiteStatement previous,UInt32超时MS,字符串& strRemain)位于系统.数据. SQLite.SQLiteCommand.构建下一个命令()位于系统.数据. SQLite.SQLiteDataReader.下一个结果()位于系统.数据. SQLite.SQLiteDataReader. ctor(SQLiteCommand cmd,命令行为行为)位于系统。数据。SQLite。SQLite命令。执行读取器(命令行为行为行为)位于系统。数据。SQLite。SQLite命令。在C:\用户\管理员\CSharp\数据包网络主机\数据包网络主机\示例\捕获和解析数据包\Main.cs中的捕获和解析数据包. MainClass. Main(字符串[]参数)处执行非查询(命令行为行为):第196行
下面是我代码:
try
{
string sql = $"insert into log (Time, TYPE, DstIP, DstPort, SrcIP, SrcPort, Flag, TotalPacketLength, AsciiCode) values ('{DateTime.Now.ToString("yyyy'-'MM'-'dd HH:mm:ss")}', 'TCP', '{ipPacket.DestinationAddress}', '{tcpPacket.DestinationPort}', '{ipPacket.SourceAddress}', '{tcpPacket.SourcePort}', '{tcpPacket.Flags}', '{tcpPacket.TotalPacketLength}', '{ipPacket.PrintAscii()}')";
SQLiteCommand command = new SQLiteCommand(sql, m_dbconnection);
command.ExecuteNonQuery();
m_dbconnection.Close();
}
catch(Exception) //if Ascii code is too long
{
string sql = $"insert into log (Time, TYPE, DstIP, DstPort, SrcIP, SrcPort, Flag, TotalPacketLength, AsciiCode) values ('{DateTime.Now.ToString("yyyy'-'MM'-'dd HH:mm:ss")}', 'TCP', '{ipPacket.DestinationAddress}', '{tcpPacket.DestinationPort}', '{ipPacket.SourceAddress}', '{tcpPacket.SourcePort}', '{tcpPacket.Flags}', '{tcpPacket.TotalPacketLength}', 'Encrypted Code')";
SQLiteCommand command = new SQLiteCommand(sql, m_dbconnection);
command.ExecuteNonQuery();
m_dbconnection.Close();
}
这是我的数据库结构:
string sql = "create table log(PacketID INTEGER PRIMARY KEY AUTOINCREMENT, Time DATETIME," +
"TYPE CHAR(6) NULL DEFAULT '', DstIP varchar(15), DstPort INT, SrcIP varchar(15), SrcPort INT, Flag varchar(2), TotalPacketLength INT, AsciiCode BLOB)";
SQLiteCommand command = new SQLiteCommand(sql, m_dbconnection);
command.ExecuteNonQuery();
1条答案
按热度按时间nhhxz33t1#
我在另一个答案中提供了一个简单的 Package 类。
你不应该像现在这样构建一个SQL命令。你会被SQL-Injection打开,这是不好的。通过直接使用一个与你的表匹配的类结构对象,这可能会提供更好的控制和可读性,而不会暴露于注入和字符串命令的错误格式。