2016-08-22 80 views
0

我試圖發送帶有Scapy的圖書館通過套接字在Python 3發數據包發送一個「方法」 ..如何通過插座

這是代碼:

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() 

Obviusly腳本引發錯誤:

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

你看到的特定錯誤是因爲你沒有調用spoofing方法。它會消失,如果你添加括號,像這樣:

s.send(self.spoofing()) 

但是,你有更嚴重的問題。 socket.socket(socket.AF_INET, socket.SOCK_STREAM)返回一個TCP套接字,並且系統將始終插入(正確的)源和目標端口和地址,如connect()調用所設置的。

如果你想要做的IP地址欺騙,你將不得不找出如何使用原始套接字,並直接將它們傳遞到數據鏈路驅動程序 - 見this example幾個線索,如何進行(祈禱你在Windows上無法正常工作,它會盡其所能阻止原始套接字訪問)。

+0

嗨,謝謝你的回答。你沒有得到我想要做的代碼..這是我的錯..因爲檢查我發佈的問題並不太清楚..事實上,現在我已經在最後添加了更多的行,以更好地解釋什麼我正在尋找...無論如何是的..我忘了寫()到self.spoofing的調用。我正在運行Linux :) – Sperly1987

+0

如果要發送帶有欺騙性IP地址的數據包,唯一的方法是使用原始套接字接口。如果你只是想代理,連接到代理,它應該建立自己的連接到目的地(但將有代理的源IP地址和端口號)。 – holdenweb

+0

所以它會無論如何...我唯一想做的事情就是讓代理髮送這個欺騙數據包...導致我的ISP阻止欺騙數據包..所以我猜如果代理可以做「髒工作「對我來說......所以這不可能吧?對不起,但我是一個新手 – Sperly1987