Class: Ronin::Support::Network::IP
- Defined in:
- lib/ronin/support/network/ip.rb,
lib/ronin/support/network/ip/mixin.rb
Overview
Represents a single IP address.
Examples
ip = IP.new('192.30.255.113')
Reverse DNS lookup:
ip.get_name
# => "lb-192-30-255-113-sea.github.com"
ip.get_names
# => ["lb-192-30-255-113-sea.github.com"]
ip.get_host
# => #<Ronin::Support::Network::Host: lb-192-30-255-113-sea.github.com>
ip.get_hosts
# => [#<Ronin::Support::Network::Host: lb-192-30-255-113-sea.github.com>]
ip.host
# => #<Ronin::Support::Network::Host: lb-192-30-255-113-sea.github.com>
ip.hosts
# => [#<Ronin::Support::Network::Host: lb-192-30-255-113-sea.github.com>]
Get ASN information:
ip.asn
# => #<Ronin::Support::Network::ASN::DNSRecord:0x00007f34142de598
# @country_code="US",
# @name=nil,
# @number=15133,
# @range=#<Ronin::Support::Network::IPRange::CIDR: 93.184.216.0/24>>
Defined Under Namespace
Modules: Mixin
Constant Summary collapse
- IPINFO_URI =
The URI for https://ipinfo.io/ip
URI::HTTPS.build(host: 'ipinfo.io', path: '/ip')
Constants inherited from IPAddr
Instance Attribute Summary collapse
-
#address ⇒ String
readonly
The address of the IP.
Class Method Summary collapse
-
.extract(text, version = nil) {|ip| ... } ⇒ Array<String>
Extracts IP Addresses from text.
-
.local_address ⇒ String
Determines the local IP address.
-
.local_addresses ⇒ Array<String>
Determines all local IP addresses.
-
.local_ip ⇒ IP
Determines the local IP.
-
.local_ips ⇒ Array<IP>
Determines all local IPs.
-
.public_address ⇒ String?
Determines the current public IP address.
-
.public_ip ⇒ IP?
Determines the current public IP.
Instance Method Summary collapse
-
#asn ⇒ ASN::Record
The Autonomous System Number (ASN) information for the IP address.
-
#broadcast? ⇒ Boolean
Determines if the address is a IPv4 broadcast addresses.
-
#get_host(**kwargs) ⇒ Host?
Looks up the host for the IP.
-
#get_hosts(**kwargs) ⇒ Array<Host>
Looks up all hosts associated with the IP.
-
#get_name(**kwargs) ⇒ String?
(also: #reverse_lookup)
Looks up the hostname of the address.
-
#get_names(**kwargs) ⇒ Array<String>
Looks up all hostnames associated with the IP.
-
#get_ptr_name(**kwargs) ⇒ String?
Queries the
PTR
host name for the IP address. -
#get_ptr_names(**kwargs) ⇒ Array<String>
Queries all
PTR
names for the IP address. -
#get_ptr_record(**kwargs) ⇒ Resolv::DNS::Resource::PTR?
Queries the first
PTR
DNS record for the IP address. -
#get_ptr_records(**kwargs) ⇒ Array<Resolv::DNS::Resource::PTR>
Queries all
PTR
DNS records for the IP address. -
#host ⇒ Host?
The primary host name of the address.
-
#hosts ⇒ Array<Host>
The host names of the address.
-
#initialize(address, family = Socket::AF_UNSPEC) ⇒ IP
constructor
Initializes the IP address.
-
#inspect ⇒ String
Inspects the IP.
-
#logical? ⇒ Boolean
Determines if the address is a "logical" IPv4 address.
Methods inherited from IPAddr
Methods included from Enumerable
Constructor Details
#initialize(address, family = Socket::AF_UNSPEC) ⇒ IP
If the IP address has an %iface
suffix, it will be removed from
the IP address.
Initializes the IP address.
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/ronin/support/network/ip.rb', line 94 def initialize(address,family=Socket::AF_UNSPEC) # XXX: remove the %iface suffix for ruby < 3.1.0 if address.kind_of?(String) && address =~ /%.+$/ address = address.sub(/%.+$/,'') end begin super(address,family) rescue IPAddr::InvalidAddressError raise(InvalidIP,"invalid IP address: #{address.inspect}") end @address = case address when String then address.to_s else to_s end end |
Instance Attribute Details
#address ⇒ String (readonly)
The address of the IP.
72 73 74 |
# File 'lib/ronin/support/network/ip.rb', line 72 def address @address end |
Class Method Details
.extract(text, version = nil) {|ip| ... } ⇒ Array<String>
Extracts IP Addresses from text.
235 236 237 238 239 240 241 242 243 244 245 246 |
# File 'lib/ronin/support/network/ip.rb', line 235 def self.extract(text,version=nil,&block) return enum_for(__method__,text,version).to_a unless block_given? regexp = case version when :ipv4, :v4, 4 then Text::Patterns::IPV4_ADDR when :ipv6, :v6, 6 then Text::Patterns::IPV6_ADDR else Text::Patterns::IP_ADDR end text.scan(regexp,&block) return nil end |
.local_address ⇒ String
Determines the local IP address.
191 192 193 |
# File 'lib/ronin/support/network/ip.rb', line 191 def self.local_address Socket.ip_address_list.first.ip_address end |
.local_addresses ⇒ Array<String>
Determines all local IP addresses.
154 155 156 157 158 159 160 161 162 163 164 |
# File 'lib/ronin/support/network/ip.rb', line 154 def self.local_addresses Socket.ip_address_list.map do |addrinfo| address = addrinfo.ip_address if address =~ /%.+$/ address = address.sub(/%.+$/,'') end address end end |
.local_ip ⇒ IP
Determines the local IP.
204 205 206 |
# File 'lib/ronin/support/network/ip.rb', line 204 def self.local_ip new(local_address) end |
.local_ips ⇒ Array<IP>
Determines all local IPs.
178 179 180 |
# File 'lib/ronin/support/network/ip.rb', line 178 def self.local_ips local_addresses.map(&method(:new)) end |
.public_address ⇒ String?
Determines the current public IP address.
121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/ronin/support/network/ip.rb', line 121 def self.public_address response = begin Net::HTTP.get_response(IPINFO_URI) rescue # ignore any network failures end if response && response.code == '200' return response.body end end |
.public_ip ⇒ IP?
Determines the current public IP.
139 140 141 142 143 |
# File 'lib/ronin/support/network/ip.rb', line 139 def self.public_ip if (address = public_address) new(address) end end |
Instance Method Details
#asn ⇒ ASN::Record
The Autonomous System Number (ASN) information for the IP address.
303 304 305 |
# File 'lib/ronin/support/network/ip.rb', line 303 def asn @asn ||= ASN.query(self) end |
#broadcast? ⇒ Boolean
Determines if the address is a IPv4 broadcast addresses.
264 265 266 267 |
# File 'lib/ronin/support/network/ip.rb', line 264 def broadcast? # NOTE: IPv6 does not have broadcast addresses ipv4? && (@addr & 0xff) == 0xff end |
#get_host(**kwargs) ⇒ Host?
Looks up the host for the IP.
377 378 379 380 381 |
# File 'lib/ronin/support/network/ip.rb', line 377 def get_host(**kwargs) if (name = get_name(**kwargs)) Host.new(name) end end |
#get_hosts(**kwargs) ⇒ Array<Host>
Looks up all hosts associated with the IP.
403 404 405 |
# File 'lib/ronin/support/network/ip.rb', line 403 def get_hosts(**kwargs) get_names(**kwargs).map { |name| Host.new(name) } end |
#get_name(**kwargs) ⇒ String? Also known as: reverse_lookup
Looks up the hostname of the address.
327 328 329 |
# File 'lib/ronin/support/network/ip.rb', line 327 def get_name(**kwargs) DNS.get_name(@address,**kwargs) end |
#get_names(**kwargs) ⇒ Array<String>
Looks up all hostnames associated with the IP.
353 354 355 |
# File 'lib/ronin/support/network/ip.rb', line 353 def get_names(**kwargs) DNS.get_names(@address,**kwargs) end |
#get_ptr_name(**kwargs) ⇒ String?
Queries the PTR
host name for the IP address.
477 478 479 |
# File 'lib/ronin/support/network/ip.rb', line 477 def get_ptr_name(**kwargs) DNS.get_ptr_name(@address,**kwargs) end |
#get_ptr_names(**kwargs) ⇒ Array<String>
Queries all PTR
names for the IP address.
517 518 519 |
# File 'lib/ronin/support/network/ip.rb', line 517 def get_ptr_names(**kwargs) DNS.get_ptr_names(@address,**kwargs) end |
#get_ptr_record(**kwargs) ⇒ Resolv::DNS::Resource::PTR?
Queries the first PTR
DNS record for the IP address.
458 459 460 |
# File 'lib/ronin/support/network/ip.rb', line 458 def get_ptr_record(**kwargs) DNS.get_ptr_record(@address,**kwargs) end |
#get_ptr_records(**kwargs) ⇒ Array<Resolv::DNS::Resource::PTR>
Queries all PTR
DNS records for the IP address.
498 499 500 |
# File 'lib/ronin/support/network/ip.rb', line 498 def get_ptr_records(**kwargs) DNS.get_ptr_records(@address,**kwargs) end |
#host ⇒ Host?
The primary host name of the address.
436 437 438 |
# File 'lib/ronin/support/network/ip.rb', line 436 def host hosts.first end |
#hosts ⇒ Array<Host>
This method returns memoized data.
The host names of the address.
421 422 423 |
# File 'lib/ronin/support/network/ip.rb', line 421 def hosts @hosts ||= get_hosts end |
#inspect ⇒ String
Inspects the IP.
531 532 533 |
# File 'lib/ronin/support/network/ip.rb', line 531 def inspect "#<#{self.class}: #{@address}>" end |
#logical? ⇒ Boolean
Determines if the address is a "logical" IPv4 address.
285 286 287 |
# File 'lib/ronin/support/network/ip.rb', line 285 def logical? ipv4? && (@addr & 0xff) == 0x00 end |