scapy rpc server接口应用实例

scapy rpc client主体代码

#!/usr/bin/env python

# simple scapy server tests

# pip install pcapy scapy zmq nose
# to run use nosetests scapy_test.py

import zmq
import json
import base64
from scapy.all import *

context = zmq.Context()
socket = context.socket(zmq.REQ)
socket.connect('tcp://localhost:4507')

id = 0
global v_handler

def pretty_json(obj):
    return json.dumps(obj, indent=4)

def pprint(obj):
    print(pretty_json(obj))

def cmd(method, params):
    global id
    id += 1
    request = {"jsonrpc": "2.0", "method": method, "params": params, "id": id}
    payload = json.dumps(request)
    print("Request: \n" + pretty_json(request))
    socket.send(payload)
    buf = socket.recv()
    res = json.loads(buf)
    print("Response: \n" + pretty_json(res))
    if res.get('error'):
        raise Exception(res.get('error'))
    return res['result']


v_handler = cmd('get_version_handler', ['1','02'])
  • get_all命令
def test_get_all():
    cmd('get_all', [v_handler])
  • build_pkt命令
def test_build_pkt
  PKT = [
          { "id": "Ether", "fields": [{"id": "src", "value": "de:ad:be:ef:de:ad"}] },
          { "id": "Dot1Q"},
          { "id": "Dot1Q", "fields": [{"id": "vtype", "value": "1"}] },
          { "id": "IP", "fields": [{"id": "src", "value": "127.0.0.1"}, {"id": "chksum", "value": "0x312"}] },
          { "id": "TCP", "fields": [{"id": "sport", "value": "443"}] }
  ]
  cmd('build_pkt', [v_handler, PKT])
  • reconstruct_pkt命令
packet_scapy=Ether(dst="10:10:10:10:10:10")/IP(src='127.0.0.1')/TCP(sport=80)

def test_layer_field_edit():
    modif = [
            {"id": "Ether"},
            {"id": "IP"},
            {"id": "TCP", "fields": [{"id": "dport", "value": 777}]},
    ]
    cmd('reconstruct_pkt', [v_handler, base64.b64encode(bytes(packet_scapy)).decode('utf-8'), modif])
  • write_pcap命令
packet_scapy=Ether(dst="10:10:10:10:10:10")/IP(src='127.0.0.1')/TCP(sport=80)

def test_pcap_write():
    pcap_bin = cmd('write_pcap', [v_handler, [base64.b64encode(bytes(packet_scapy)).decode('utf-8')]]).decode('base64')
    with open('result.pcap', 'w+b') as f:
        f.write(pcap_bin)
        print("Wrote pcap result.pcap")
    wrpcap('result-orig.pcap', [packet_scapy])
    print("Wrote orig pcap file to result-orig.pcap")
posted @ 2022-01-25 10:38  staylight  阅读(114)  评论(0编辑  收藏  举报