arpscanner 0.1.2 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
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