1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

scapy で pcap から snmptrap パケットを再現して送信

Last updated at Posted at 2017-12-22

Python で pcap から snmptrap のパケットを再現

業務上、snmptrap を生成して trapper の検証をする必要があったため、以下のツールを作成した。
参考 Sending packets from pcap with changed src/dst in scapy

snmptrapgen.py
import argparse

from scapy.all import *


class SNMPTrapGenerator(object):
    def __init__(self, infile, dst_ip, src_ip=None):
        try:
            self.rd = PcapReader(infile)
            self.dst_ip = dst_ip
            self.src_ip = src_ip
        except IOError:
            print "Failed reading file %s contents" % infile
            sys.exit(1)

    def send(self, count=100):
        pkt_cnt = 0
        p_out = []

        for p in self.rd:
            pkt_cnt += 1
            np = p.payload
            if IP in np and UDP in np:
                np[IP].dst = self.dst_ip
                if self.src_ip is not None:
                    np[IP].src = self.src_ip
                del np[IP].chksum
                del np[UDP].chksum
                p_out.append(np)
                if pkt_cnt % count == 0:
                    send(PacketList(p_out))
                    p_out = []

        # Send remianing in final batch
        send(PacketList(p_out))
        print "Total packets sent %d" % pkt_cnt


def main():
    parser = argparse.ArgumentParser(prog="snmptrapgen", add_help=True)
    parser.add_argument("-f", "--file", type=str,
                        required=True, help="Specify .pcap file.")
    parser.add_argument("-d", "--dst_ip", type=str,
                        required=True, help="Sepcify destination ip address.")
    parser.add_argument("-s", "--src_ip", type=str,
                        required=False, help="Specify source ip address.p")
    args = parser.parse_args()

    stg = SNMPTrapGenerator(args.file, args.dst_ip)
    stg.send(1000)


if __name__ == "__main__":
    main()

前準備

scapy と pypcap が必要であるため、以下のコマンドでインストールする。

# yum -y install libpcap-devel python-pip
# pip install scapy pypcap

あとは自前の pcap ファイルを使って snmptrapd などのサーバーに投入することができる。
頑張れば scapy で好きなパケットを作れたりするので試験したいパケットなどがあれば積極的に使っていきたい。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?