如何通过套接字

时间:2016-08-22 13:01:47

标签: python sockets python-3.x methods byte

我正在尝试通过python 3中的套接字发送使用scapy库创建的数据包。

这就是代码:

from scapy.all import *
import socket, threading

def loop():
    global threads
    for x in range(800):
        sending().start()

class sending(threading.Thread):

    def run(self):
        self.connstart()

    def connstart(self):
        host = "ip" # this could be a proxy for example
        port = port # the port of proxy
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((host, port))
        s.send(self.spoofing)

    def spoofing(self):
        A = "ip" # spoofed source IP address
        B = "ip" # destination IP address
        C = RandShort() # source port
        D = port # destination port
        payload = "yada yada yada" # packet payload
        spoofed_packet = IP(src=A, dst=B) / TCP(sport=C, dport=D) / payload
        return spoofed_packet

loop()

很可惜这个脚本引发了一个错误:

Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner
    self.run()
  File "spoof.py", line 12, in run
    self.connstart()
  File "spoof.py", line 19, in connstart
    s.send(self.spoofing)
TypeError: a bytes-like object is required, not 'method'

因为你有办法绕过这个吗?那么发送这个数据包不变吗?

我想做的是连接到代理,然后向代理发送包含欺骗源ip和目的地的tcp数据包(与代理不同,它将是另一个站点/服务器)

1 个答案:

答案 0 :(得分:1)

您看到的特定错误是因为您没有调用spoofing方法。如果添加括号,它将会消失,如下所示:

s.send(self.spoofing())

但是你有更严重的问题。 socket.socket(socket.AF_INET, socket.SOCK_STREAM)返回TCP套接字,系统将始终插入(正确的)源端口和目标端口和地址,如connect()调用所设置。

如果你想进行IP地址欺骗,你将不得不找出如何使用原始套接字并将它们直接传递给数据链接驱动程序 - 请参阅this example以获取有关如何继续的一些线索(并祈祷你不在Windows上工作,它可以尽一切力量防止原始套接字访问。