packet_via_dmem 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -1
- data/README.md +5 -5
- data/capture/generate.rb +42 -0
- data/lib/packet_via_dmem/received.rb +6 -3
- data/packet_via_dmem.gemspec +1 -1
- data/spec/packet_via_dmem_spec.rb +85 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9a5e83611fb35ed4c593d62c0c15e643bc40ff8e
|
4
|
+
data.tar.gz: a8b95c28a02ddcfdb38f114b736315eb36660153
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aefcd401cb0bb61ffd7deca8a91bef83bdfbe0f44ab4dba56c89cbbb7d5660f79d321b6d31be9930144b8e87101c0fb51887bb4d3fe1430f62d1f719a8578c6e
|
7
|
+
data.tar.gz: e51a8739969f00208b65fa59bc0d757a4c307a8480b0117423988abc84c251d8d0d0e73c3b4d2fccef7d21e58ba99b0e21882698488b72055de7f7363cda387a
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -14,14 +14,14 @@ To capture say packets with IP address 10.11.12.13
|
|
14
14
|
MX104-ABB-0(test2nqe31-re1.dk vty)# test jnh 0 packet-via-dmem dump
|
15
15
|
MX104-ABB-0(test2nqe31-re1.dk vty)# test jnh 0 packet-via-dmem disable
|
16
16
|
|
17
|
+
## Install
|
18
|
+
% gem install packet_via_dmem
|
17
19
|
|
18
20
|
## CLI
|
19
|
-
% ./bin/packet-via-dmem
|
21
|
+
% ./bin/packet-via-dmem --both ~/output.txt|grep Packet|wc -l
|
20
22
|
55
|
21
|
-
% ./bin/packet-via-dmem ~/output.txt |wc -l
|
23
|
+
% ./bin/packet-via-dmem ~/output.txt|grep Packet|wc -l
|
22
24
|
28
|
23
|
-
% ./bin/packet-via-dmem -r 0 ~/output.txt |wc -l
|
24
|
-
0
|
25
25
|
% ./bin/packet-via-dmem ~/output.txt|text2pcap - output.pcap
|
26
26
|
Input from: Standard input
|
27
27
|
Output to: output.pcap
|
@@ -99,7 +99,7 @@ To capture say packets with IP address 10.11.12.13
|
|
99
99
|
* value of fift+sixth seems to sometime indicate special cases
|
100
100
|
* 0x1fff - Packet missing everything before IPv4 TTL, yet has some extra. I saw BGP from control-plane with this and also TCP/SMB2 with Seq1, it was transit, but perhaps it was via ARP resolve/punt and thus coming from control-plane?
|
101
101
|
* 0x2000 - BFD frames from control-plane, missing L2
|
102
|
-
* 0x4220 - Was traffic for AE/802.1AX,
|
102
|
+
* 0x4220 - Was traffic for AE/802.1AX, missing ethertype, MACs changed, 2 mystery bytes
|
103
103
|
* 0x8000 - I need to pop 14 bytes extra
|
104
104
|
|
105
105
|
* 00 (22) (33) (44) \<src\> (66)
|
data/capture/generate.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'packet_via_dmem'
|
4
|
+
|
5
|
+
# takes 1 or more argument pointing to filename as 'input-something.txt'
|
6
|
+
# this input should be data gathered from juniper
|
7
|
+
# writes to output received-something.txt, sent-something.txt,
|
8
|
+
# original-something.txt and header-something.txt
|
9
|
+
# This is used to generate files for testing
|
10
|
+
|
11
|
+
class PacketViaDMEM
|
12
|
+
class CreateTestFiles
|
13
|
+
def initialize
|
14
|
+
@dmem = PacketViaDMEM.new
|
15
|
+
end
|
16
|
+
def run file
|
17
|
+
name, ext = file.split '.'
|
18
|
+
return unless ext == 'txt'
|
19
|
+
direction, name = name.split '-'
|
20
|
+
return unless direction == 'input'
|
21
|
+
headers, received, sent, originals = [], [], [], []
|
22
|
+
@dmem.parse(File.read(file)).each do |packet|
|
23
|
+
case packet.type
|
24
|
+
when :received then received << packet.packet.join
|
25
|
+
when :sent then sent << packet.packet.join
|
26
|
+
else raise StandardError, "invalid type #{type}"
|
27
|
+
end
|
28
|
+
headers << packet.header.join
|
29
|
+
originals << packet.original.join
|
30
|
+
end
|
31
|
+
File.write('header-' + name + '.txt', headers.join("\n"))
|
32
|
+
File.write('sent-' + name + '.txt', sent.join("\n"))
|
33
|
+
File.write('received-' + name + '.txt', received.join("\n"))
|
34
|
+
File.write('original-' + name + '.txt', originals.join("\n"))
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
runner = PacketViaDMEM::CreateTestFiles.new
|
40
|
+
ARGV.each do |arg|
|
41
|
+
runner.run arg
|
42
|
+
end
|
@@ -19,9 +19,12 @@ class PacketViaDMEM
|
|
19
19
|
pop += offset
|
20
20
|
case pkt[4+offset..5+offset].join.to_i(16)
|
21
21
|
when 0x8000 then pop+=14
|
22
|
-
|
23
|
-
|
24
|
-
|
22
|
+
# ae/802.1AX is special, I seem to have 2 bytes I don't know
|
23
|
+
# and ethertype missing, and MAC is weird, mpls labels are present
|
24
|
+
# i'd need example carrying IPv4/IPv6 instead of MPLS to decide those two bytes
|
25
|
+
when 0x4220
|
26
|
+
pop+=14 #pop macs and weird two bytes (return macs in push)
|
27
|
+
push = pkt[8+offset..19+offset] + FAKE[:etype_mpls]
|
25
28
|
when 0x2000 # these were BFD packets from control-plane
|
26
29
|
pop+=5
|
27
30
|
push = FAKE[:dmac] + FAKE[:smac] + FAKE[:etype_ipv4]
|
data/packet_via_dmem.gemspec
CHANGED
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'minitest/pride'
|
3
|
+
require_relative '../lib/packet_via_dmem'
|
4
|
+
|
5
|
+
CAPTURES = File.expand_path File.join(File.dirname(__FILE__), '..', 'capture')
|
6
|
+
|
7
|
+
describe PacketViaDMEM do
|
8
|
+
|
9
|
+
before do
|
10
|
+
@dmem = PacketViaDMEM.new
|
11
|
+
@input = {}
|
12
|
+
@sent = {}
|
13
|
+
@received = {}
|
14
|
+
@original = {}
|
15
|
+
@header = {}
|
16
|
+
Dir.glob(File.join(CAPTURES, '*.txt')) do |entry|
|
17
|
+
_directory, file = File.split entry
|
18
|
+
file, _ext = file.split '.'
|
19
|
+
type, name = file.split '-'
|
20
|
+
next unless name
|
21
|
+
case type
|
22
|
+
when 'input' then @input[name] = File.read entry
|
23
|
+
when 'received' then @received[name] = File.read(entry).split
|
24
|
+
when 'sent' then @sent[name] = File.read(entry).split
|
25
|
+
when 'original' then @original[name] = File.read(entry).split
|
26
|
+
when 'header' then @header[name] = File.read(entry).split
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '#parse' do
|
32
|
+
before do
|
33
|
+
@parsed = {}
|
34
|
+
@input.each do |name, str|
|
35
|
+
@parsed[name] = @dmem.parse str
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'returns as many times as called' do
|
40
|
+
@parsed.size.must_equal @input.size
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'produces correct headers' do
|
44
|
+
@parsed.each do |name, packets|
|
45
|
+
packets.each_with_index do |packet, index|
|
46
|
+
packet.header.join.must_equal @header[name][index], "header #{name} at line #{index+1}"
|
47
|
+
end
|
48
|
+
packets.size.must_equal @header[name].size, "header #{name} has incorrect amount of packets"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'produces correct received frames' do
|
53
|
+
@parsed.each do |name, packets|
|
54
|
+
index = -1
|
55
|
+
packets.each do |packet|
|
56
|
+
next unless packet.type == :received
|
57
|
+
packet.packet.join.must_equal @received[name][index+=1], "received #{name} at line #{index+1}"
|
58
|
+
end
|
59
|
+
@received[name].size.must_equal index+1, "received #{name} has incorrect amount of packets"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'produces correct sent frames' do
|
64
|
+
@parsed.each do |name, packets|
|
65
|
+
index = -1
|
66
|
+
packets.each do |packet|
|
67
|
+
next unless packet.type == :sent
|
68
|
+
packet.packet.join.must_equal @sent[name][index+=1], "sent #{name} at line #{index+1}"
|
69
|
+
end
|
70
|
+
@sent[name].size.must_equal index+1, "sent #{name} has incorrect amount of packets"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'produces correct original frames' do
|
75
|
+
@parsed.each do |name, packets|
|
76
|
+
packets.each_with_index do |packet, index|
|
77
|
+
packet.original.join.must_equal @original[name][index], "original #{name} at line #{index+1}"
|
78
|
+
end
|
79
|
+
packets.size.must_equal @header[name].size, "original #{name} has incorrect amount of packets"
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: packet_via_dmem
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Saku Ytti
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: slop
|
@@ -38,6 +38,7 @@ files:
|
|
38
38
|
- README.md
|
39
39
|
- Rakefile
|
40
40
|
- bin/packet-via-dmem
|
41
|
+
- capture/generate.rb
|
41
42
|
- lib/packet_via_dmem.rb
|
42
43
|
- lib/packet_via_dmem/cli.rb
|
43
44
|
- lib/packet_via_dmem/packet.rb
|
@@ -45,6 +46,7 @@ files:
|
|
45
46
|
- lib/packet_via_dmem/received.rb
|
46
47
|
- lib/packet_via_dmem/sent.rb
|
47
48
|
- packet_via_dmem.gemspec
|
49
|
+
- spec/packet_via_dmem_spec.rb
|
48
50
|
homepage: http://github.com/ytti/packet_via_dmem
|
49
51
|
licenses:
|
50
52
|
- Apache-2.0
|