最近有需求对pcap包进行处理,要求提取数据包中的字段,并存储到sqlite数据库中,于是乎利用scapy写了一个简单的脚本,其中包括了对IP、TCP、UDP、ICMP包的解析,其实代码重复了许多,但是为了追求工作的效率,暂且留下这段代码吧,后续慢慢优化~大神莫见怪。
#! -- coding:utf-8 --
from scapy.all import *
import sqlite3
import getopt
global output_database
def ip_insert_db(packet_dict):
db = sqlite3.connect(output_database)
cur = db.cursor()
#cur.execute('DROP TABLE IF EXISTS APACHE_LOG')
cur.execute('''CREATE TABLE IF NOT EXISTS IP_PACKET(
eventno INTEGER,
eventtype TEXT,
timestamp INTEGER,
timestampusec INTEGER,
sipaddr TEXT,
dipaddr TEXT,
totalpacketlen INTEGER,
protocol INTEGER,
tos INTEGER,
ipid INTEGER,
ipcksum INTEGER,
ipttl INTEGER
)''')
query = '''insert into IP_PACKET (eventno,eventtype,timestamp,timestampusec,sipaddr,dipaddr,totalpacketlen,
protocol,tos,ipid,ipcksum,ipttl) values ('%d','%s','%d','%d','%s','%s','%d','%d','%d','%d','%d','%d');''' \
% (packet_dict['evento'],packet_dict['eventtype'],packet_dict['timestamp'],packet_dict['timestampusec'],packet_dict['sipaddr'],packet_dict['dipaddr'],
packet_dict['totalpacketlen'],packet_dict['protocol'],packet_dict['tos'],packet_dict['ipid'],packet_dict['ipcksum'],packet_dict['ipttl'])
cur.execute(query)
db.commit()
cur.close()
db.close()
return
def tcp_insert_db(packet_dict):
db = sqlite3.connect(output_database)
cur = db.cursor()
#cur.execute('DROP TABLE IF EXISTS APACHE_LOG')
cur.execute('''CREATE TABLE IF NOT EXISTS TCP_PACKET(
eventno INTEGER,
eventtype TEXT,
timestamp INTEGER,
timestampusec INTEGER,
sipaddr TEXT,
dipaddr TEXT,
sport INTEGER,
dport INTEGER,
totalpacketlen INTEGER,
protocol INTEGER,
tos INTEGER,
ipid INTEGER,
ipcksum INTEGER,
ipttl INTEGER,
tcpseq TEXT,
tcpack TEXT,
tcpflags TEXT
)''')
query = '''insert into TCP_PACKET (eventno,eventtype,timestamp,timestampusec,sipaddr,dipaddr,sport,dport,totalpacketlen,
protocol,tos,ipid,ipcksum,ipttl,tcpseq,tcpack,tcpflags) values (%d,'%s','%d','%d','%s','%s','%d','%d','%d','%d','%d','%d','%d','%d',
'%s','%s','%s');''' \
% (packet_dict['evento'],packet_dict['eventtype'],packet_dict['timestamp'],packet_dict['timestampusec'],packet_dict['sipaddr'],packet_dict['dipaddr'],
packet_dict['sport'], packet_dict['dport'],packet_dict['totalpacketlen'],packet_dict['protocol'],packet_dict['tos'],packet_dict['ipid'],
packet_dict['ipcksum'],packet_dict['ipttl