Gem Version Build Status

packetgen-plugin-ipsec

Warning: this repository is a work-in-progress. It will be available with packetgen3.

This is a plugin for PacketGen gem. It adds two protocols:

  • PacketGen::Plugin::ESP: IP Encapsulating Security Payload (RFC 4303),
  • PacketGen::Plugin::IKE: Internet Key Exchange v2 (RFC 7296).

Installation

Add this line to your application's Gemfile:

gem 'packetgen-plugin-ipsec'

And then execute:

$ bundle

Or install it yourself as:

$ gem install packetgen-plugin-ipsec

Usage

First, you have to require packetgen-plugin-ipsec:

require 'packetgen-plugin-ipsec'

Parse an ESP or IKE packet

pkt = PacketGen.parse(str)

Read a PcapNG file containing ESP and/or IKE packets

pkts = PacketGen.read('ipsec.pcapng')

Access to ESP and IKE headers

pkt.esp   #=> PacketGen::Plugin::ESP
pkt.ike   #=> PacketGen::Plugin::IKE

Forge packets

ESP (transport mode)

pkt = PacketGen.gen('IP', src: '1.1.1.1', dst: '2.2.2.2').
                add('ESP', spi: 0xff456e01, sn: 12345678).
                add('UDP', dport: 4567, sport: 45362, body 'abcdef')
cipher = OpenSSL::Cipher.new('aes-128-cbc')
cipher.encrypt
cipher.key = 16bytes_key
iv = 16bytes_iv
pkt.esp.esp.encrypt! cipher, iv
pkt.to_w

IKE (IKE_SA_INIT)

pkt = PacketGen.gen('IP', src: '1.1.1.1', dst: '2.2.2.2').
                add('UDP').
                add('IKE', init_spi: spi, flags: 8).
                add('IKE::SA').
                add('IKE::KE', group: 'ECP256', content: key_ex_data).
                add('IKE::Nonce', content: nonce_data)
pkt.ike_sa.proposals << { num: 1, protocol: 'IKE' }
pkt.ike_sa.proposals.first.transforms << { type: 'ENCR', id: 'AES_CTR' }
pkt.ike_sa.proposals[0].transforms[0].attributes << { type: 0x800e, value: 128 }
pkt.to_w

See also

API documentation: http://www.rubydoc.info/gems/packetgen-plugin-ipsec

License

MIT License (see LICENSE)

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/sdaubert/packetgen-plugin-ipsec.