packet_via_dmem 0.0.14 → 0.0.15
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +21 -11
- data/capture/do_pcaps.rb +8 -0
- data/lib/packet_via_dmem/cli.rb +20 -12
- data/lib/packet_via_dmem/header/sent.rb +1 -1
- data/lib/packet_via_dmem.rb +15 -0
- data/packet_via_dmem.gemspec +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cf0a459e14095b84895caa6e51e0e091ea79e7e5
|
4
|
+
data.tar.gz: 36878c10f2139b87e7ddfc16f0e1d320eca7b071
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a19d2c19db3f377685c02a2516d76294c35ca506c591e4a541e27eade78da36d6d52012ac522299d0c81cf46a8da15971affc03c8de674a27b08880d1200688e
|
7
|
+
data.tar.gz: 662664c85751129cb1b39b2317040994c0642b91dd7e82d24c480e6f5d32c244257e18b13e64d1623368c4dabbf20761782777c9d47acbff4be6f6dc40934060
|
data/README.md
CHANGED
@@ -14,6 +14,21 @@ 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
|
+
* in capture the 0x3 sets flags for what type of packets we want, for 0x3 we
|
18
|
+
set two flags on, 'Packet' and 'PacketHead' (show mqchip N lo stats). These
|
19
|
+
two cover all real traffic.
|
20
|
+
1. Packet (whole packet seen)
|
21
|
+
2. PacketHead (334B packet, inclusive internal headers)
|
22
|
+
|
23
|
+
* after capture flags we can set up-to 8 bytes of data to match anywhere in
|
24
|
+
32B window
|
25
|
+
|
26
|
+
* after match trigger we have optional 3rd argument which gives the byte
|
27
|
+
offset where our 32B window starts from, default to 0. If you're capturing
|
28
|
+
IPv6, the DADDR won't fit in the first 32B window, so you might give offest
|
29
|
+
of say 19B to get DADDR there too (in case of L2 MAC headers, without VLAN
|
30
|
+
or MPLS)
|
31
|
+
|
17
32
|
## Install
|
18
33
|
% gem install packet_via_dmem
|
19
34
|
|
@@ -68,6 +83,11 @@ To capture say packets with IP address 10.11.12.13
|
|
68
83
|
-h, --help
|
69
84
|
%
|
70
85
|
|
86
|
+
You can also read from STDIN for live capture, some thing like this should work:
|
87
|
+
|
88
|
+
% sshfs nms: nms
|
89
|
+
% tail -fn 10000 nms/output.txt|packet-via-dmem -|text2pcap - -|wireshark -k -i -
|
90
|
+
|
71
91
|
## Library
|
72
92
|
require 'packet_via_dmem'
|
73
93
|
dmem = PacketViaDMEM.new
|
@@ -181,17 +201,7 @@ Example from MX80
|
|
181
201
|
10 0b 00 f0 02 28 81 08
|
182
202
|
|
183
203
|
### Sent header
|
184
|
-
|
185
|
-
our type. For all my examples, when we sent frame without L2 headers for
|
186
|
-
fabric, it was MPLS, but almost certainly it can be IPv4, IPv6, ARP etc too.
|
187
|
-
Need data to know which header tells that. So we are going to pop wrong amount
|
188
|
-
of bytes in many sent cases.
|
189
|
-
|
190
|
-
* first byte is output
|
191
|
-
* 0x00 == to fabric
|
192
|
-
* 0x08 == to wan
|
193
|
-
|
194
|
-
* byte 6, 7, 9, 11 or 21 probably defines type (different if we sent layer2 to fabric or if we don't)
|
204
|
+
*FIXME* check the source...
|
195
205
|
|
196
206
|
Example from MX960
|
197
207
|
|
data/capture/do_pcaps.rb
ADDED
data/lib/packet_via_dmem/cli.rb
CHANGED
@@ -9,23 +9,19 @@ class PacketViaDMEM
|
|
9
9
|
|
10
10
|
def initialize
|
11
11
|
@opts = opts_parse
|
12
|
+
@debug = @opts.debug?
|
12
13
|
@log = Logger.new STDERR
|
13
|
-
@log.level = Logger::INFO unless @
|
14
|
+
@log.level = Logger::INFO unless @debug
|
14
15
|
end
|
15
16
|
|
16
17
|
def run
|
17
|
-
file = @opts.
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
raise InvalidFile, "unable to read #{file}"
|
23
|
-
end
|
24
|
-
packets = PacketViaDMEM.new(:received=>@opts.received?,
|
25
|
-
:sent=>@opts.sent?,
|
26
|
-
:log=>@log).parse file
|
18
|
+
file = get_file if not @opts.stdin?
|
19
|
+
dmem = PacketViaDMEM.new :received=>@opts.received?,
|
20
|
+
:sent=>@opts.sent?,
|
21
|
+
:log=>@log
|
22
|
+
|
27
23
|
count = 0
|
28
|
-
|
24
|
+
block = Proc.new do |pkt|
|
29
25
|
pop = false
|
30
26
|
if pkt.type == :received
|
31
27
|
next if @opts.sent?
|
@@ -41,12 +37,24 @@ class PacketViaDMEM
|
|
41
37
|
$stderr.puts pkt.popped.join(' ') if @opts.popped?
|
42
38
|
puts
|
43
39
|
end
|
40
|
+
packets = @opts.stdin? ? dmem.stream($stdin, &block) : dmdm.parse(file).each(&block)
|
44
41
|
end
|
45
42
|
|
46
43
|
private
|
47
44
|
|
45
|
+
def get_file
|
46
|
+
file = @opts.arguments.shift
|
47
|
+
raise NoFile, 'filename is mandatory argument' unless file
|
48
|
+
begin
|
49
|
+
file = File.read(file)
|
50
|
+
rescue
|
51
|
+
raise InvalidFile, "unable to read #{file}"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
48
55
|
def opts_parse
|
49
56
|
Slop.parse do |o|
|
57
|
+
o.bool '-', '--stdin', 'stream from STDIN'
|
50
58
|
o.bool '--popped', 'print popped bytes to stderr'
|
51
59
|
o.bool '-o', '--original', 'print original frames'
|
52
60
|
o.bool '-r', '--received', 'print received frames only (DEFAULT)'
|
@@ -31,7 +31,7 @@ class Header
|
|
31
31
|
str << (decrement_reference ? 'D' : 'd')
|
32
32
|
str << (prequeue_priority ? 'P' : 'p')
|
33
33
|
str << ' # '
|
34
|
-
str << 'port: %x (%s) # ' % [port, port.divmod(64)
|
34
|
+
str << 'port: %x (%s) # ' % [port, port.divmod(64).join('/')]
|
35
35
|
str << 'type: %x # ' % type
|
36
36
|
str << 'QoS: %d@%d # ' % [queue_number, queue_system]
|
37
37
|
str << "QueueDropOp: %d\n" % [queue_drop_opcode]
|
data/lib/packet_via_dmem.rb
CHANGED
@@ -28,6 +28,20 @@ class PacketViaDMEM
|
|
28
28
|
@sc = StringScanner.new ''
|
29
29
|
end
|
30
30
|
|
31
|
+
def stream io
|
32
|
+
packet = ''
|
33
|
+
while not io.eof?
|
34
|
+
line = io.readline
|
35
|
+
if line.match PACKET
|
36
|
+
packet = parse(packet).first
|
37
|
+
yield packet if packet
|
38
|
+
packet = line
|
39
|
+
else
|
40
|
+
packet << line
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
31
45
|
def parse str
|
32
46
|
packets = Packets.new @log
|
33
47
|
@sc.string = str
|
@@ -42,6 +56,7 @@ class PacketViaDMEM
|
|
42
56
|
pkt = parse_packet pkt
|
43
57
|
packets.add pkt, type
|
44
58
|
end
|
59
|
+
@sc.string = ''
|
45
60
|
packets
|
46
61
|
end
|
47
62
|
|
data/packet_via_dmem.gemspec
CHANGED
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.15
|
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-03-
|
11
|
+
date: 2015-03-06 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/do_pcaps.rb
|
41
42
|
- capture/generate.rb
|
42
43
|
- lib/packet_via_dmem.rb
|
43
44
|
- lib/packet_via_dmem/cli.rb
|