标题中的"python实现linux下抓包并存库功能"指的是使用Python编程语言在Linux操作系统中实现网络数据包的捕获(抓包)并将捕获的数据存储到数据库中的过程。这个功能通常用于网络监控、数据分析或者故障排查。
描述中提到,项目需求是抓包后将数据包信息存入数据库进行分析,而tcpdump是常用的抓包工具,可以将抓包结果保存为文件。然而,直接使用shell脚本来实现从文件到数据库的转换可能较为复杂,因此选择Python作为实现工具,利用其丰富的第三方库。
代码中使用了以下关键知识点:
1. **Python第三方库**:`apscheduler` 用于实现定时任务,`ConfigParser` 用来读取配置文件,`MySQLdb` 是Python连接MySQL数据库的库,`Logger` 是自定义的日志模块。
2. **配置文件管理**:通过`ConfigParser`读取名为`flowstat.conf`的配置文件,获取如过滤规则、数据库连接参数等信息。
3. **日志记录**:自定义`Logger`模块用于记录程序运行状态和错误信息,方便后期排查问题。
4. **数据库连接与操作**:使用`MySQLdb`库连接MySQL数据库,执行SQL语句(例如插入数据)并对事务进行提交。代码示例中,当读取文件内容后,遍历每一行,将符合格式的数据插入到`tbpk_packet`表中。
5. **文件操作**:读取由tcpdump生成的文件(例如`*.txt`),使用`open()`函数打开文件,`readlines()`读取所有行,然后对每一行进行处理。处理完后,使用`truncate(0)`清空文件内容,`close()`关闭文件。
6. **定时任务**:`apscheduler`库中的`cron_schedule`方法用于设置定时任务,这里是每分钟执行一次`packagestat_job`函数,统计并处理数据包信息。
7. **系统命令执行**:`os.system()`调用shell命令,启动tcpdump进行抓包,例如`nohup ./capturePacket.sh [filterNet1] [filterNet2] [packetFile] &`,其中`filterNet1`和`filterNet2`是网络过滤规则,`packetFile`是保存抓包结果的文件名。
8. **守护进程**:使用`daemonic=False`设置`Scheduler`为非守护进程,确保程序在后台持续运行。
9. **异常处理**:在整个流程中,使用`try-except`结构捕获可能出现的异常,如数据库连接错误、文件读写错误等,并通过日志模块记录下来。
这段代码实现了在Linux环境下,使用Python结合tcpdump进行网络数据包捕获,并将捕获的数据实时存储到MySQL数据库中,同时通过定时任务定期清理和更新数据库中的数据。这样的功能对于需要实时监控网络流量或分析网络行为的项目来说非常实用。