gpt4 book ai didi

python - 使用 nfqueue/scapy 更改 TCP 负载

转载 作者:可可西里 更新时间:2023-11-01 02:31:52 24 4
gpt4 key购买 nike

你好,我正在使用 nfqueue 和 scapy,我的目标是在我的 NFQUEUE 接收数据包,更改有效负载并重新发送它们。

我可以毫无问题地更改 TTL 等字段,但在更改有效负载时,我遇到了问题。

当我更改有效载荷时,我使用 wireshark 嗅探数据包,显然我发送了修改了有效载荷的数据包,但服务器没有应答。

这是我的代码:

#!/usr/bin/env python

import nfqueue
from scapy.all import *
def callback(payload):
data = payload.get_data()
pkt = IP(data)

pkt[TCP].payload = str(pkt[TCP].payload).replace("ABC","GET")

pkt[IP].ttl = 40

print 'Data: '+ str(pkt[TCP].payload)
print 'TTL: ' + str(pkt[IP].ttl)

del pkt[IP].chksum
payload.set_verdict_modified(nfqueue.NF_ACCEPT, str(pkt), len(pkt))
def main():
q = nfqueue.queue()
q.open()
q.bind(socket.AF_INET)
q.set_callback(callback)
q.create_queue(0)
try:
q.try_run() # Main loop
except KeyboardInterrupt:
q.unbind(socket.AF_INET)
q.close()

main()

我已经为到端口 80 的传出流量设置了这条规则:iptables -I OUTPUT -s 192.168.1.10 -p tcp --dport 80 -j NFQUEUE

然后,为了测试它,例如我打开 telnet 到 google 端口 80,执行 GET/HTTP/1.1,这就是我所看到的:

TTL: 40
DATA: GET / HTTP/1.1

现在,如果我执行 ABC/HTTP/1.1,我不会收到任何答复!我的 telnet 卡住了。

我也尝试在 HTTP 网站浏览器上浏览一些东西,检查 wireshark 我的 TTL 如何真正变为 40,然后,浏览字符串“ABC”,我的浏览器再次卡住。我发现请求已更改为 GET,但没有收到任何答复。

谢谢有点让我头疼,如果有更多经验的人能引导我走上正确的道路,我将不胜感激。提前谢谢你。

最佳答案

我添加了重新计算 TCP 校验和的行,这很有用。

这只有在我更改有效载荷时才有效,我不改变它的长度,否则,我需要更改 IP header 的字段长度,然后回答我自己,也许其他人正在寻找这个答案,我通过以下方式实现了这一目标:

payload_before = len(pkt[TCP].payload)

pkt[TCP].payload = str(pkt[TCP].payload).replace("Heading","Other string")

payload_after = len(pkt[TCP].payload)

payload_dif = payload_after - payload_before

pkt[IP].len = pkt[IP].len + payload_dif

我知道我必须更改更多字段,因为有时,如果您添加足够的负载以需要分段成一个新数据包,则必须更改更多字段。

目前我不知道如何有效但一点一点地实现这一目标。希望有人发现我的更改有效负载的解决方案很有用。

关于python - 使用 nfqueue/scapy 更改 TCP 负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27293924/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com