mac_man 0.1.0
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 +7 -0
- data/README.md +25 -0
- data/lib/mac_man/address.rb +66 -0
- data/lib/mac_man/version.rb +3 -0
- metadata +47 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 3a8790951bcf3fb9153ced86590979b8bf7c4f17a558511a4f4f363d274ab52f
|
4
|
+
data.tar.gz: cc955f42f5b29e2b971976f7b6ac192626b6e3635c4488f72f2cc8594674536b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f1c311f3fd4fe510fab198cc335381232a1832f6729da7f2cf1c6dd90bfb5b4992ab9376a1b355d40ed7979b2046f3be00929b092ec1ddcac09d911cf77288fd
|
7
|
+
data.tar.gz: 74ce41ae1e531e7dd2a09bdc6c78cbb93bcdd01d5b6c5b90810eb5fd09f63ad873684a80a9e3fda88f5f4e9ab4654cb0fbbc6f8d5660555cc3f70047c67234ac
|
data/README.md
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# MacMac
|
2
|
+
|
3
|
+
You want to generate Your own Mac Addresses or manipulate exiting addresses? Mac Man has you covered.
|
4
|
+
|
5
|
+
## Create Random addresses
|
6
|
+
|
7
|
+
Completely randomized address. Mac Man ensures that the broadcast flag is not set and the locally administered flag is set.
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
random_address = MacMan::Address.new
|
11
|
+
```
|
12
|
+
|
13
|
+
## Create Random address with prefix
|
14
|
+
|
15
|
+
Create Address where the NIC part is randomized but the prefix is fix.
|
16
|
+
|
17
|
+
```ruby
|
18
|
+
random_address = MacMan::Address.new(oui: 0xAB_CD_EF)
|
19
|
+
```
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module MacMan
|
2
|
+
BROADCAST_BITMASK = 0x01_00_00_00_00_00
|
3
|
+
LOCAL_ADMINISTERED_BITMASK = 0x02_00_00_00_00_00
|
4
|
+
|
5
|
+
class Address
|
6
|
+
|
7
|
+
attr_accessor :address
|
8
|
+
|
9
|
+
# MAC Address for manipulation
|
10
|
+
#
|
11
|
+
# @param address [String] A MAC address for manipulation
|
12
|
+
# @param oui [Sring] The Organizationally Uniqe Identifier of the Address. The second half is randomized.
|
13
|
+
def initialize(**args)
|
14
|
+
if args[:address]
|
15
|
+
@address = args[:address]
|
16
|
+
elsif args[:oui]
|
17
|
+
@address = (args[:oui] << 24 ) + rand(0..0xFFFFFF)
|
18
|
+
else
|
19
|
+
@address = rand(0..0xFF_FF_FF_FF_FF_FF)
|
20
|
+
self.unset_broadcast_bit
|
21
|
+
self.set_locally_administered_bit
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Human readable Text representation of the address
|
26
|
+
#
|
27
|
+
# @param delimiter [String] Set the delimiter used to separate the address. Default: ':'(colon)
|
28
|
+
def to_hex(delimiter: ':')
|
29
|
+
@address.to_s(16).chars.each_slice(2).map(&:join).join(delimiter)
|
30
|
+
end
|
31
|
+
|
32
|
+
# Checks if the address is locally administered
|
33
|
+
#
|
34
|
+
# @see: https://en.wikipedia.org/wiki/MAC_address#Universal_vs._local_(U/L_bit)
|
35
|
+
def locally_administered?
|
36
|
+
(@address & LOCAL_ADMINISTERED_BITMASK) > 0
|
37
|
+
end
|
38
|
+
|
39
|
+
# Checks if the address has the broadcast flag set
|
40
|
+
#
|
41
|
+
# @see https://en.wikipedia.org/wiki/MAC_address#Unicast_vs._multicast_(I/G_bit)
|
42
|
+
def broadcast_address?
|
43
|
+
(@address & BROADCAST_BITMASK) > 0
|
44
|
+
end
|
45
|
+
|
46
|
+
# Enables the locally administered flag
|
47
|
+
#
|
48
|
+
# @see: https://en.wikipedia.org/wiki/MAC_address#Universal_vs._local_(U/L_bit)
|
49
|
+
def set_locally_administered_bit
|
50
|
+
@address |= LOCAL_ADMINISTERED_BITMASK
|
51
|
+
end
|
52
|
+
|
53
|
+
# Disables the Broadcast flag
|
54
|
+
#
|
55
|
+
# @see https://en.wikipedia.org/wiki/MAC_address#Unicast_vs._multicast_(I/G_bit)
|
56
|
+
#
|
57
|
+
def unset_broadcast_bit
|
58
|
+
@address ^= BROADCAST_BITMASK
|
59
|
+
end
|
60
|
+
|
61
|
+
def to_s
|
62
|
+
to_hex
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
metadata
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mac_man
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Moritz Kraus
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-03-21 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Generate and manipulate mac addresses
|
14
|
+
email: moritz.kraus@makandra.de
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- README.md
|
20
|
+
- lib/mac_man/address.rb
|
21
|
+
- lib/mac_man/version.rb
|
22
|
+
homepage: https://makandra.com
|
23
|
+
licenses:
|
24
|
+
- MIT
|
25
|
+
metadata:
|
26
|
+
rubygems_mfa_required: 'true'
|
27
|
+
source_code_uri: https://github.com/moritz-makandra/mac_man
|
28
|
+
post_install_message:
|
29
|
+
rdoc_options: []
|
30
|
+
require_paths:
|
31
|
+
- lib
|
32
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '0'
|
37
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
requirements: []
|
43
|
+
rubygems_version: 3.3.7
|
44
|
+
signing_key:
|
45
|
+
specification_version: 4
|
46
|
+
summary: Manipulate MAC addresses
|
47
|
+
test_files: []
|