Skip to content

Instantly share code, notes, and snippets.

@quanon
Created April 12, 2019 08:03
Show Gist options
  • Save quanon/77c158b8e41eaffd77162ee43c9aff92 to your computer and use it in GitHub Desktop.
Save quanon/77c158b8e41eaffd77162ee43c9aff92 to your computer and use it in GitHub Desktop.
Nmap の結果を見やすくする
#! /usr/bin/env ruby
require 'open3'
class NmapResult
IP_ADDRESS_PATTERN = /\d+\.\d+\.\d+\.\d+/
MAC_ADDRESS_PATTERN = /([\dA-F]{2}:){5}[\dA-F]{2}/
attr_reader :lines
def self.parse(stdout)
_header, *lines, _footer = *stdout.split("\n")
lines
.slice_when { |_l1, l2| l2.match?(IP_ADDRESS_PATTERN) }
.map { |partial_lines| NmapResult.new(partial_lines) }
end
def initialize(lines)
@lines = lines
end
def ip
lines[0][IP_ADDRESS_PATTERN]
end
def mac_address
return nil unless lines[2]
lines[2][MAC_ADDRESS_PATTERN]
end
def device
return nil unless lines[2]
lines[2][/(?<=\()[\w\s]+(?=\))/]
end
end
stdout, _ = Open3.capture2('sudo nmap -sP 192.168.1.0/24')
results = NmapResult.parse(stdout)
results.each_with_index do |result, i|
puts if i > 0
puts(result.ip)
puts("#{result.device} (#{result.mac_address})") if result.device
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment