是否有可能?如是?如何?
这是我的脚本(不起作用):
from scapy.all import *
import socket
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
p=IP(dst="192.168.1.254")/TCP(flags="S", sport=RandShort(), dport=80)
s.connect(("192.168.1.254",80))
s.send(p)
print ("Request sent!")
except:
print ("An error occurred.")
- 更新 -
p = bytes(IP(dst="DESTINATIONIP")/TCP(flags="S", sport=RandShort(), dport=80))
while True:
try:
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, sockip, sockport, True)
s = socks.socksocket()
s.connect((DESTINATIONIP,DESTINATIONPORT))
s.send(p)
print ("Request Sent!")
except:
print ("An error occurred.")
是否可以通过HTTP代理而不是袜子来发送此syn数据包?
要使用原始套接字发送虚假数据包,您必须先将数据包转换为原始字节。例如,使用scapy制作的数据包如下所示:
p = IP(dst="192.168.1.254")/TCP(flags="S", sport=RandShort(),dport=80)
应该使用转换为原始字节bytes(p)
。这将为您提供以下信息:
'E\x00\x00(\x00\x01\x00\x00@\x06\xf6w\xc0\xa8\x01\t\xc0\xa8\x01\xfe\x97%\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00t\x15\x00\x00'
然后,您可以使用原始套接字发送它。因此,对于您的示例,您可以修改一些代码,例如:
from scapy.all import *
import socket
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
p = IP(dst="192.168.1.254")/TCP(flags="S", sport=RandShort(),dport=80)/Raw("Hallo world!")
s.connect(("192.168.1.254",80))
s.send(bytes(p))
print "[+] Request Sent!"
except Exception, e:
raise e
这应该工作!
注意!!!请记住,当您使用套接字(模块)与另一台计算机通信时,套接字会自动构造您的数据包(标头等)并发送您希望发送的内容。但是,当您使用scapy构建数据包时,便会从头开始制作它,因此您要定义其内容以及其标头,层等。因此,在您的示例中,当您发送数据包时,您将以内容有效载荷的形式发送“全部”,甚至是数据包标头(ip-header,tcp-header)。您可以通过运行以下嗅探器进行测试:
#!/usr/bin/env python
from scapy.all import *
def printer(packet):
if packet.haslayer(Raw):
print packet.getlayer(Raw).load
print "[+] Sniff started"
while True:
sniff(store=0, filter="host 192.168.1.254 and port 80", prn=printer, iface="your_interface_here")
好吧,当嗅探器运行时,尝试运行我帖子中的第一段代码(当我使用原始layer = tcp.payload更新数据包时),您会发现不仅数据而且整个数据包都作为数据传输。因此,您可以两次发送标头。这就是为什么套接字具有自己的send方法和scapy自身的原因。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句