ip_frag 0.0.2 → 0.0.3

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.
data/.gitignore CHANGED
@@ -1,18 +1,18 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
18
  spec/helper/*.dat
data/.travis.yml ADDED
@@ -0,0 +1,11 @@
1
+ language: ruby
2
+ rvm:
3
+ #- "1.8.7"
4
+ #- "1.9.2"
5
+ - "1.9.3"
6
+ #- jruby-18mode # JRuby in 1.8 mode
7
+ #- jruby-19mode # JRuby in 1.9 mode
8
+ #- rbx-18mode
9
+ #- rbx-19mode
10
+ # uncomment this line if your project needs to run something other than `rake`:
11
+ # script: rake
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'ip_frag'
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+ gem 'rake'
5
+ gem 'rspec'
data/LICENSE CHANGED
@@ -1,22 +1,22 @@
1
- Copyright (c) 2012 yafei Lee
2
-
3
- MIT License
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining
6
- a copy of this software and associated documentation files (the
7
- "Software"), to deal in the Software without restriction, including
8
- without limitation the rights to use, copy, modify, merge, publish,
9
- distribute, sublicense, and/or sell copies of the Software, and to
10
- permit persons to whom the Software is furnished to do so, subject to
11
- the following conditions:
12
-
13
- The above copyright notice and this permission notice shall be
14
- included in all copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
1
+ Copyright (c) 2012 yafei Lee
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
22
  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -1,22 +1,22 @@
1
- # IpFrag
2
-
1
+ # IpFrag
2
+
3
3
  Help you quickly create fragged packets, used by network test.
4
4
 
5
-
6
- ## Installation
7
-
8
- $ gem install ip_frag
9
-
10
- ## Usage
11
-
5
+
6
+ ## Installation
7
+
8
+ $ gem install ip_frag
9
+
10
+ ## Usage
11
+
12
12
  $ ipgen --size 2000 --mtu 1480
13
13
 
14
- It will generate **2** UDP packets fragged.
15
-
16
- ## Contributing
17
-
18
- 1. Fork it
19
- 2. Create your feature branch (`git checkout -b my-new-feature`)
20
- 3. Commit your changes (`git commit -am 'Added some feature'`)
21
- 4. Push to the branch (`git push origin my-new-feature`)
22
- 5. Create new Pull Request
14
+ It will generate **2** UDP packets fragged.
15
+
16
+ ## Contributing
17
+
18
+ 1. Fork it
19
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
20
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
21
+ 4. Push to the branch (`git push origin my-new-feature`)
22
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,5 @@
1
+ require 'rspec/core/rake_task'
2
+
3
+ RSpec::Core::RakeTask.new(:spec)
4
+
5
+ task :default => :spec
data/ip_frag.gemspec CHANGED
@@ -1,18 +1,18 @@
1
- # -*- encoding: utf-8 -*-
2
- require File.expand_path('../lib/ip_frag/version', __FILE__)
3
-
4
- Gem::Specification.new do |gem|
5
- gem.authors = ["yafei Lee"]
6
- gem.email = ["lyfi2003@gmail.com"]
7
- gem.description = %q{ip frag tool}
8
- gem.summary = %q{ip frag tool}
9
- gem.homepage = ""
10
-
11
- gem.files = `git ls-files`.split($\)
12
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
- gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
- gem.name = "ip_frag"
15
- gem.require_paths = ["lib"]
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/ip_frag/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["yafei Lee"]
6
+ gem.email = ["lyfi2003@gmail.com"]
7
+ gem.description = %q{ip frag tool}
8
+ gem.summary = %q{ip frag tool}
9
+ gem.homepage = ""
10
+
11
+ gem.files = `git ls-files`.split($\)
12
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
+ gem.name = "ip_frag"
15
+ gem.require_paths = ["lib"]
16
16
  gem.version = IPFrag::VERSION
17
- gem.add_dependency "DIY-pcap", ">= 0.3.7"
18
- end
17
+ gem.add_dependency "DIY-pcap", ">= 0.3.7"
18
+ end
data/lib/ip_frag.rb CHANGED
@@ -1,5 +1,3 @@
1
- require "ip_frag/version"
2
-
3
- require 'rubygems'
4
- require 'diy-pcap'
5
- require 'ip_frag/generator'
1
+ require "ip_frag/version"
2
+ require 'DIY-pcap'
3
+ require 'ip_frag/generator'
@@ -8,22 +8,25 @@ module IPFrag
8
8
 
9
9
  def split_to_ip_packet
10
10
  ret = []
11
-
11
+
12
12
  offset = 0
13
13
  ret << make_ip_packet(packet_offset) do |p|
14
14
  p.offset = make_offset(offset)
15
+ p.payload = udp_offset( contant(udp_size_from(@size), p), 1)
15
16
  end
16
17
  offset += packet_offset
17
18
 
18
- (packet_count - 2).times do
19
+ (packet_count - 2).times do |i|
19
20
  ret << make_ip_packet(packet_offset) do |p|
20
21
  p.offset = make_offset(offset)
22
+ p.payload = udp_offset( contant(udp_size_from(@size), p), i+2)
21
23
  end
22
24
  offset += packet_offset
23
25
  end
24
26
 
25
27
  ret << make_ip_packet(packet_left) do |p|
26
28
  p.offset = make_offset(offset, true)
29
+ p.payload = udp_offset( contant(udp_size_from(@size), p), packet_count)
27
30
  end
28
31
 
29
32
  ret
@@ -71,7 +74,6 @@ module IPFrag
71
74
 
72
75
  def make_ip_packet(size)
73
76
  ip = Mu::Pcap::IPv4.new(src_ip, dst_ip)
74
- ip.payload = contant(size)
75
77
  ip.proto = Mu::Pcap::IP::IPPROTO_UDP
76
78
  yield ip if block_given?
77
79
  ip
@@ -97,7 +99,7 @@ module IPFrag
97
99
  def check_size_mtu
98
100
 
99
101
  if @size <= @mtu
100
- raise "Size#{@size} MUST be big than Mtu#{@mtu}."
102
+ raise "Size #{@size} MUST be big than Mtu #{@mtu}."
101
103
  end
102
104
 
103
105
  if @mtu <= 0
@@ -121,10 +123,36 @@ module IPFrag
121
123
  @dst_mac ||= '00:00:00:00:00:02'
122
124
  end
123
125
 
124
- attr_writer :src_ip, :dst_ip, :src_mac, :dst_mac
126
+ def src_port
127
+ @src_port ||= 1000
128
+ end
129
+
130
+ def dst_port
131
+ @dst_port ||= 2000
132
+ end
133
+
134
+
135
+ attr_writer :src_ip, :dst_ip, :src_mac, :dst_mac, :src_port, :dst_port
136
+
137
+ def udp_offset( udp, packet_num)
138
+ size = @mtu
139
+ udp[(packet_num-1)*size..packet_num*size -1 ]
140
+ end
141
+
142
+ def udp_size_from(ip_size)
143
+ ip_size - 8
144
+ end
145
+
125
146
 
126
- def contant(size)
127
- 'a' * size
147
+ # 生成特定长度的 UDP 报文
148
+ def contant(size, ip)
149
+ return @udp_packet if @udp_packet
150
+ udp = Mu::Pcap::UDP.new(src_port, dst_port)
151
+ udp.payload = 'a' * size
152
+ udp_packet_str = StringIO.new
153
+ udp.write(udp_packet_str, ip)
154
+ udp_packet_str.rewind
155
+ @udp_packet ||= udp_packet_str.read
128
156
  end
129
157
  end
130
158
 
@@ -1,3 +1,3 @@
1
- module IPFrag
2
- VERSION = "0.0.2"
3
- end
1
+ module IPFrag
2
+ VERSION = "0.0.3"
3
+ end
@@ -1,4 +1,5 @@
1
1
  require 'spec_helper'
2
+ require 'fileutils'
2
3
 
3
4
  describe IPFrag do
4
5
  it "show version" do
@@ -13,13 +14,30 @@ describe IPFrag do
13
14
  end
14
15
 
15
16
  it "#split" do
16
- g = IPFrag::Generator.new(100, 8)
17
+ g = IPFrag::Generator.new(1000, 80)
17
18
  g.split_to_ip_packet.size.should == 13
18
19
  g.split_to_ethernet_packet.size.should == 13
19
20
  end
20
21
 
21
22
  it "#write_dat" do
22
23
  g = IPFrag::Generator.new(2000, 1460)
23
- g.write_dat('helper')
24
+ FileUtils.mkdir('tmp') rescue nil
25
+ g.write_dat('tmp')
26
+ Dir["tmp/*"].size.should == 2
27
+ FileUtils.rm_rf('tmp')
24
28
  end
29
+
30
+ it "#65535 split" do
31
+ g = IPFrag::Generator.new(65535, 696)
32
+ g.split_to_ip_packet.size.should == 95
33
+ g.split_to_ethernet_packet.size.should == 95
34
+ end
35
+
36
+ it "#contant" do
37
+ g = IPFrag::Generator.new(2000, 1500)
38
+ ip = mock
39
+ ip.stub(:pseudo_header).and_return("123")
40
+ g.contant(g.udp_size_from(1000), ip).size.should == g.udp_size_from(1000) + 8
41
+ end
42
+
25
43
  end
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ip_frag
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
4
+ hash: 25
5
+ prerelease:
5
6
  segments:
6
7
  - 0
7
8
  - 0
8
- - 2
9
- version: 0.0.2
9
+ - 3
10
+ version: 0.0.3
10
11
  platform: ruby
11
12
  authors:
12
13
  - yafei Lee
@@ -14,8 +15,7 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2012-10-29 00:00:00 +08:00
18
- default_executable:
18
+ date: 2012-12-11 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: DIY-pcap
@@ -25,6 +25,7 @@ dependencies:
25
25
  requirements:
26
26
  - - ">="
27
27
  - !ruby/object:Gem::Version
28
+ hash: 29
28
29
  segments:
29
30
  - 0
30
31
  - 3
@@ -43,9 +44,11 @@ extra_rdoc_files: []
43
44
 
44
45
  files:
45
46
  - .gitignore
47
+ - .travis.yml
46
48
  - Gemfile
47
49
  - LICENSE
48
50
  - README.md
51
+ - Rakefile
49
52
  - bin/ipgen
50
53
  - ip_frag.gemspec
51
54
  - lib/ip_frag.rb
@@ -54,7 +57,6 @@ files:
54
57
  - lib/ip_frag/version.rb
55
58
  - spec/generator_spec.rb
56
59
  - spec/spec_helper.rb
57
- has_rdoc: true
58
60
  homepage: ""
59
61
  licenses: []
60
62
 
@@ -68,6 +70,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
68
70
  requirements:
69
71
  - - ">="
70
72
  - !ruby/object:Gem::Version
73
+ hash: 3
71
74
  segments:
72
75
  - 0
73
76
  version: "0"
@@ -76,13 +79,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
76
79
  requirements:
77
80
  - - ">="
78
81
  - !ruby/object:Gem::Version
82
+ hash: 3
79
83
  segments:
80
84
  - 0
81
85
  version: "0"
82
86
  requirements: []
83
87
 
84
88
  rubyforge_project:
85
- rubygems_version: 1.3.7
89
+ rubygems_version: 1.8.24
86
90
  signing_key:
87
91
  specification_version: 3
88
92
  summary: ip frag tool