首页
社区
课程
招聘
[已解决] [求助]python写的scapy修改tcp包的问题 100.00雪花
发表于: 2024-5-17 17:24 2266

[已解决] [求助]python写的scapy修改tcp包的问题 100.00雪花

2024-5-17 17:24
2266

使用这个脚本修改包修改成功了,不知道为什么发送出去服务端接收到的是没修改成功的

拦截修改脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
from scapy.all import *
import os
#
# # 设置网卡为混杂模式
os.system("C:\\Windows\\System32\\Npcap\\NpcapHelper.exe /enable")
 
def packet_callback(packet):
    if TCP in packet:
        # 检查目标 IP 地址是否是我们感兴趣的目标
        if packet[IP].dst == '192.168.1.1':
            # 检查数据包的前几个字节是否匹配特定模式
            if Raw in packet and packet[Raw].load.startswith(b'\x00\x1C\x42\x8A\x52'):
                print("lanjiedao le")
                print(f"Original packet: {packet.summary()}")
 
 
                # 修改数据包内容
                if Raw in packet and len(packet[Raw].load) >= 55:
                    # 修改特定字节
                    modified_payload = packet[Raw].load[:55] + b'\x00' + packet[Raw].load[56:]
                    # 更新数据包负载
                    packet[Raw].load = modified_payload
 
                    # 删除校验和以便重新计算
                    del packet[IP].chksum
                    del packet[TCP].chksum
 
                    # 发送修改后的包
                    # 打印数据包的字节码
                    packet.show()
                    send(packet,verbose=0)
                    print(f"Modified packet sent: {packet.summary()}")
 
def main():
    # 捕获TCP数据包
    sniff(filter="tcp", prn=packet_callback, store=0,count=0,iface="Parallels VirtIO Ethernet Adapter")
 
if __name__ == '__main__':
    main()

用于测试的客户端和服务端脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#client.py
import socket
 
def tcp_client(host, port, hex_bytes):
    # 将16进制字节码转换为字节对象
    message = bytes.fromhex(hex_bytes)
 
    # 创建 TCP 套接字
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as client_socket:
        # 连接到服务器
        client_socket.connect((host, port))
        # 发送数据
        client_socket.sendall(message)
        print("Message sent to server (hex):", hex_bytes)
 
# 客户端配置
SERVER_HOST = '192.168.1.1'
SERVER_PORT = 8888
#\x48\x65\x6c\x6c\x6f\x2c\x20\x73\x65\x72\x76\x65\x72\x21
HEX_BYTES = "001C428A524F3C22FB2603440800450000360000400040065462C0A8329DC0A83272CB901D6C83B4D2349B7F5FAD50181000567D0000018E0E0026D945D9F8D9D9D9D9D9"
 
# 启动客户端
tcp_client(SERVER_HOST, SERVER_PORT, HEX_BYTES)

服务端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import socket
 
def tcp_server(host, port):
    # 创建 TCP 套接字
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server_socket:
        # 绑定到指定地址和端口
        server_socket.bind((host, port))
        # 开始监听连接
        server_socket.listen()
        print(f"Server listening on {host}:{port}")
         
        while True:
            # 接受客户端连接
            conn, addr = server_socket.accept()
            print(f"Connected to client: {addr}")
            with conn:
                while True:
                    # 接收数据
                    data = conn.recv(1024)
                    if not data:
                        break
                    print("Received data:", data)
                    # 打印数据包的字节码
                    print("Byte representation:", format_bytes(data))
 
# 格式化字节码为指定格式的字符串
def format_bytes(data):
    # 将每个字节转换为两位的十六进制表示,并用空格隔开
    return ' '.join(f"{byte:02X}" for byte in data)
 
# 服务端配置
HOST = '0.0.0.0'
PORT = 8888
 
# 启动服务端
tcp_server(HOST, PORT)

具体要实现的场景是windows系统开了一个安卓虚拟机,通过在Windows虚拟机开启拦截脚本监听安卓虚拟机的网卡,达到修改请求包的作用。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 200
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
使用socks5代理 修改可以解决
2024-5-18 15:10
0
游客
登录 | 注册 方可回帖
返回
//