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