packet_via_dmem 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|