相关疑难解决方法(0)

使用Scapy的不需要的RST TCP数据包

为了了解TCP是如何工作的,我试图建立自己的TCP SYN/SYN-ACK/ACK(基于教程:http://www.thice.nl/creating-ack-get-packets-with-scapy/).

问题是,只要我的计算机从服务器接收到SYN-ACK,它就会生成一个停止连接过程的RST数据包.

我尝试了OS X Lion和Ubuntu 10.10 Maverick Meerkat,都重置了连接.我发现了这个:http://lkml.indiana.edu/hypermail/linux/net/0404.2/0021.html,我不知道是不是这个原因.

有谁能告诉我可能是什么原因?以及如何避免这个问题?

谢谢.

python networking tcp scapy

22
推荐指数
3
解决办法
1万
查看次数

如何将 http 标头添加到使用 scapy 嗅探的数据包中

我正在尝试使用 scapy 嗅探一个向外发送的 http 数据包,在其中添加一些新的 http 标头并提前发送。这里的目的是在保持数据包完整的同时只插入新的标头。如果需要,应最大程度地进行任何校验和重新计算。

已经解决了几乎所有关于 SO 的问题,但没有完全得到解决方案。

以下是我所做的。

def parse(pkt):

    if pkt.haslayer(TCP) and pkt.getlayer(TCP).dport == 80 and pkt.haslayer(Raw):
        pkt = pkt / "New Header:value\r\n\r\n"

        # OR i tried this
        #pkt = pkt.getlayer(Raw).load / Raw.load(load="New Header:value\r\n\r\n")

        #pkt.getlayer(Raw).load("New Header:value\r\n\r\n")
        pkt.show()
        #del pkt[IP].chksum
        send(pkt)
#end parse function

# start sniffing
a=sniff(filter="tcp and ( port 80 )", prn=parse)
Run Code Online (Sandbox Code Playgroud)

问题是上面的代码插入了一个新的原始有效负载部分,而不是添加一个普通的标头。根据 HTTP 标准,已经有一个双换行符 \r\n\r\n 来指示标头终止。

为了克服这个问题,我尝试通过执行以下操作来删除最后一个 \r\n

   #pkt = pkt.getlayer(Raw).load[-2:] / Raw.load(load="New Header:value\r\n\r\n")
Run Code Online (Sandbox Code Playgroud)

但这会删除所有以前存在的标题,只剩下“新标题”。

我已经在 Linux mint 上试过了。

更新:我正在尝试创建一个新的 http 有效负载,其中包含以前的标头,我将添加一些。有人可以帮助如何删除现有图层

python network-programming http scapy packet-sniffers

7
推荐指数
1
解决办法
1万
查看次数