arpscanner 0.1.2 → 0.4.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 6d6410ec395ebf8a20edd7a02b2a338ba0fec1dc
4
- data.tar.gz: e29ae8619ce9b9b4009a0ae5dee351bd7535a6da
2
+ SHA256:
3
+ metadata.gz: 8ea3680f4cd90afc3a9226ac50f09ed29207d22140fe12aec3797d93ec82debd
4
+ data.tar.gz: 90ee670b16e9ddef8070e3b302cc99f909543d4e1adde849f410553fac6286ba
5
5
  SHA512:
6
- metadata.gz: d69efda8dd5a65543444c0891f9fd34ce0ab52150c20c9e0df3fd511f3c7a330e7a67b0e5b91cc95aebeab1c24a2a9587bd5dbc1bf82776020b07ba6c0ca75cb
7
- data.tar.gz: 6dacfdc32115a7532778e5122b8aff71f476b38101a7246f881738afc3c25a8437102f4dda034c8398f9a31c1cc8007240f6542bcfdfcfc6b8edfd981118d23e
6
+ metadata.gz: 73dda44bec43931021287fa44dfaf7a0933b67d42dbf1c7a8d4890a351b46d93a05f8c88cc53ad44871b5d75ec8c0b6e78bbc334b60c3bdd003babe9d95253f6
7
+ data.tar.gz: 5725ce3032952361ed0caa333860d822b364d4fbc99ba1d97d917a1c0035ab979a1ce7112a765884c674ed9ee6fb8950f4affb2e99b55680f05cfb4d816233c2
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -2,21 +2,27 @@
2
2
 
3
3
  # file: arpscanner.rb
4
4
 
5
+ require 'resolv' # resolv is a built-in Ruby library
5
6
  require 'dynarex'
7
+ require 'mactovendor'
8
+
6
9
 
7
10
  class ArpScanner
11
+ using ColouredText
8
12
 
9
13
  # options:
10
14
  # nic: e.g. eth0, enp2s0f0
11
15
  #
12
- def initialize(nic: 'eth0')
16
+ def initialize(nic: `ip addr`[/(?<=global )\w+/], vendors: {},
17
+ nameserver: nil)
13
18
 
14
19
  package = 'arp-scan'
20
+ @vendors, @nameserver = vendors, nameserver
15
21
 
16
22
  found = `dpkg --get-selections | grep #{package}`
17
23
 
18
24
  if found.empty? then
19
- raise 'ArpScanner: arp-scanner package not found'
25
+ raise 'ArpScanner: arp-scan package not found'.error
20
26
  end
21
27
 
22
28
  @arpscan_cmd = "sudo #{package} --interface=#{nic} --localnet"
@@ -26,11 +32,39 @@ class ArpScanner
26
32
  def scan()
27
33
 
28
34
  a = `#{@arpscan_cmd}`.lines
35
+
36
+ a2 = a[2..-4].map do |x|
29
37
 
30
- a2 = a[2..-3].map {|x| %i(ip mac mfr).zip(x.chomp.split("\t")).to_h}
38
+ r = %i(ip mfr mac).zip(x.chomp.split("\t").values_at(0,2,1))
39
+
40
+ if @nameserver then
41
+
42
+ begin
43
+ hostname = Resolv::DNS.new(:nameserver => [@nameserver]).getname(r[0][1]).to_s
44
+ rescue
45
+ hostname = ''
46
+ puts ($!).to_s.warning
47
+ end
48
+
49
+ r.insert(1, [:hostname, hostname])
50
+
51
+ else
52
+ %i(ip mfr mac).zip(x.chomp.split("\t")).to_h
53
+ end
54
+
55
+ h = r.to_h
56
+
57
+ if h[:mfr] == '(Unknown)' then
58
+ vendor = MacToVendor.find h[:mac]
59
+ h[:mfr] = vendor if vendor
60
+ end
61
+
62
+ h
63
+
64
+ end
31
65
 
32
66
  # Add additional vendors
33
- h = {/^b8:27:eb:/ => 'Raspberry Pi Foundation'}
67
+ h = {/^b8:27:eb:/ => 'Raspberry Pi Foundation'}.merge(@vendors)
34
68
 
35
69
  a2.map! do |x|
36
70
 
@@ -38,10 +72,10 @@ class ArpScanner
38
72
  x[:mfr] = vendor if vendor
39
73
  x
40
74
 
41
- end
42
-
43
- @dx = Dynarex.new
44
- @dx.import a2
75
+ end
76
+
77
+ # sort by IP address
78
+ Dynarex.new.import a2.sort_by {|x| x[:ip][/\d+$/].to_i}
45
79
 
46
80
  end
47
81
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arpscanner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -10,28 +10,32 @@ bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIDljCCAn6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBIMRIwEAYDVQQDDAlnZW1t
14
- YXN0ZXIxHjAcBgoJkiaJk/IsZAEZFg5qYW1lc3JvYmVydHNvbjESMBAGCgmSJomT
15
- 8ixkARkWAmV1MB4XDTE3MDQyNDA5MzA0MloXDTE4MDQyNDA5MzA0MlowSDESMBAG
16
- A1UEAwwJZ2VtbWFzdGVyMR4wHAYKCZImiZPyLGQBGRYOamFtZXNyb2JlcnRzb24x
17
- EjAQBgoJkiaJk/IsZAEZFgJldTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
18
- ggEBAN+QLE6Yi4Jch6ppEryYSM+k3fSq28g+YIoMO6GwTBEOg2z/FOWS4ycQF5Zg
19
- RrZGCWlegCnvkvgCwo6BsH7WeU0zNUg63QWjS1BPPKpPSWkUmG3Yo3SQMynL7gAO
20
- NaacqrnW9DPgKoSHwtHPSk8tribyDAuZHATNWtO4GiKXWMl+8tyWvM3QlcyJtUER
21
- FP0W5eXGXtjdUVk1+7WSWVJRKR8jySRTTAjH4bbTxBf837HzjMtgLKCfyW8L4Asn
22
- drJ/JhG3SkcwSdv6Ak0i2fT9+3UaHUtC2M6O+xHtbyDhFzt3zShWDa3mgcnwRgSe
23
- wm1j2Ndn6FK7XtRRgpOZv5QPj70CAwEAAaOBijCBhzAJBgNVHRMEAjAAMAsGA1Ud
24
- DwQEAwIEsDAdBgNVHQ4EFgQU6gvSWNYHJnNpLXV+IZy6iXV9nDswJgYDVR0RBB8w
25
- HYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1h
26
- c3RlckBqYW1lc3JvYmVydHNvbi5ldTANBgkqhkiG9w0BAQUFAAOCAQEAtK/D1dXv
27
- J/IA8H8dyRSrYKcUIIiOdO2IBWGwHv575z6Mn/N8t0QKI/J0KajTmdmJgzSpLMdi
28
- vlL3GHtq7FuSSyIS0x4DUAsrnnqW0wLO5RO45StesM3Ox50Fnns3bZ+mzNbnie9w
29
- JTBFt0JaDfm7XX4YBGoRAVx09MGb2nY9+b6ADmuxc8RKnES6aBcUjKeiekjvwCSp
30
- rSG6h0tzkS+T20MrUsoAFbUZrl9M66n/bRiOi4M3a5+yXtdFl8mNUao9AEy1agrY
31
- zGbFtmj+qxIMN740pko5J1wO5TCj/o4CkGZgKODzlJWD41lgJTffttClCxwyaqrY
32
- zkG+5A2e9mDZwA==
13
+ MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
14
+ YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjAwODIyMjE1MjI4WhcN
15
+ MjEwODIyMjE1MjI4WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
+ cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC2yZsN
17
+ ZVizvyMG5JScuVhKSEJ9fv33KWpRkiCV7n2D/SUFxFvt/3zk77o7RsZ3cHD0a6P7
18
+ gTt+1HWxxUK4OwIgxpyOAVtg47+ns/e23OTmxBsPNyqp1up/3uNnkwwQQQTkBBqp
19
+ u6o+X6fiptHKIUh/WQF1i4uvhiGkf3BH0Kbvb1L1CSITZMlGuuasWZAwNyOn+rMk
20
+ mjylFhI5Un3cck7+L2iwAjFwR/DuvFLREiYHMDX5BELUXwCGlgtHpa7KEkEfP+8B
21
+ EUYEz219k+9y+RcReWoiDUsHN0q6lbnmNAP7j3vyEulIvLFRNzpLXJ2Z6HjV9wOA
22
+ 9dDEgCC4xkABAQ75E1SVSHkLzvmOSKy1CUT2b0FUoXdkcEAWAX6HSfnUH9GRJOQc
23
+ 8bhYUpi+NIbRT7RWJHyWBz+hauEO/1ggQ4m4ZOadm4yOxJ7LkGcwb0MsECKzFDRR
24
+ Y/EuIEv5rh9sk5Va5wFG5leyUZYmZvGSnpyvRm/XuGDh2vLiAk0xvSOyejMCAwEA
25
+ AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUAPeiepJa
26
+ +c0wMMdqidykpGLmRHAwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
27
+ c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
28
+ BgkqhkiG9w0BAQsFAAOCAYEADBzb0y9myCatops5l7QFHUp7jzLiBTBz6o4GwWky
29
+ dGe8tTfuDHQOk+m9WvLKtTZ2XCychu3yTruFXrHFB8b23SndrYgwvvb2mDNQT6bo
30
+ ltUZrkFYHHgjYUDbLw1ToeTGh882VD2G1d3cooLoN378MMUrM7IV8YisS7vtoRmu
31
+ tVZhYvwP06fS0eedDEVhx5Azi3OLTb5+hORvsnksvL1PlFqrVNO/lOGva2WM4Yt0
32
+ CpaA6lVJl3ypb/15vLrOGthmWlSFuSt4at+OZB5KxtSMclxDz9fq+c3M32uOsTXE
33
+ 07u4GCEVyvcFLBaNf6/ZF3ke24rHm6CMp/mCnFjYdRW3qIBgo0dc6gD+K1JYZThD
34
+ iV+jNLjfVhVAUXJX/n4d1qclFgFcNKQT93vklLApz7QZFzEho0MQcyV7Iq9VxOKw
35
+ cOLTxTEGHP0PrD7OYVyXjy1/2XJC9E3Ca9wr7MWld01vUdMbC0TZaqTGM+7+dejp
36
+ bCPG9KW8LldPMB4NjEePBmN1
33
37
  -----END CERTIFICATE-----
34
- date: 2018-03-03 00:00:00.000000000 Z
38
+ date: 2020-08-23 00:00:00.000000000 Z
35
39
  dependencies:
36
40
  - !ruby/object:Gem::Dependency
37
41
  name: dynarex
@@ -39,20 +43,40 @@ dependencies:
39
43
  requirements:
40
44
  - - "~>"
41
45
  - !ruby/object:Gem::Version
42
- version: '1.7'
46
+ version: '1.8'
43
47
  - - ">="
44
48
  - !ruby/object:Gem::Version
45
- version: 1.7.21
49
+ version: 1.8.27
46
50
  type: :runtime
47
51
  prerelease: false
48
52
  version_requirements: !ruby/object:Gem::Requirement
49
53
  requirements:
50
54
  - - "~>"
51
55
  - !ruby/object:Gem::Version
52
- version: '1.7'
56
+ version: '1.8'
53
57
  - - ">="
54
58
  - !ruby/object:Gem::Version
55
- version: 1.7.21
59
+ version: 1.8.27
60
+ - !ruby/object:Gem::Dependency
61
+ name: mactovendor
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: 0.1.0
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '0.1'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: 0.1.0
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '0.1'
56
80
  description:
57
81
  email: james@jamesrobertson.eu
58
82
  executables: []
@@ -79,8 +103,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
79
103
  - !ruby/object:Gem::Version
80
104
  version: '0'
81
105
  requirements: []
82
- rubyforge_project:
83
- rubygems_version: 2.6.13
106
+ rubygems_version: 3.0.3
84
107
  signing_key:
85
108
  specification_version: 4
86
109
  summary: A wrapper for the package arp-scan. It can detect if a found MAC address
metadata.gz.sig CHANGED
Binary file