Class: Rex::Post::Meterpreter::Extensions::Stdapi::Net::Interface

Inherits:
Object
  • Object
show all
Defined in:
lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb

Overview

This class represents a logical physical interface on the remote machine.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ Interface

Returns a logical interface and initializes it to the supplied parameters.


30
31
32
33
34
35
36
37
38
39
# File 'lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb', line 30

def initialize(opts={})
  self.index    = opts[:index] || -1
  self.mac_addr = opts[:mac_addr]
  self.mac_name = opts[:mac_name]
  self.mtu      = opts[:mtu]
  self.flags    = opts[:flags]
  self.addrs    = opts[:addrs]
  self.netmasks = opts[:netmasks]
  self.scopes   = opts[:scopes]
end

Instance Attribute Details

#addrsObject

An Array of IP addresses bound to the Interface.


102
103
104
# File 'lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb', line 102

def addrs
  @addrs
end

#flagsObject

The flags associated with the interface.


118
119
120
# File 'lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb', line 118

def flags
  @flags
end

#indexObject

The index of the interface.


98
99
100
# File 'lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb', line 98

def index
  @index
end

#mac_addrObject

The physical (MAC) address of the NIC.


106
107
108
# File 'lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb', line 106

def mac_addr
  @mac_addr
end

#mac_nameObject

The name of the interface.


110
111
112
# File 'lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb', line 110

def mac_name
  @mac_name
end

#mtuObject

The MTU associated with the interface.


114
115
116
# File 'lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb', line 114

def mtu
  @mtu
end

#netmasksObject

An Array of netmasks. This will have the same number of elements as #addrs


122
123
124
# File 'lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb', line 122

def netmasks
  @netmasks
end

#scopesObject

An Array of IPv6 address scopes. This will have the same number of elements as #addrs


126
127
128
# File 'lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb', line 126

def scopes
  @scopes
end

Instance Method Details

#ipObject

The first address associated with this Interface


91
92
93
# File 'lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb', line 91

def ip
  addrs.first
end

#prettyObject

Returns a pretty string representation of the interface's properties.


44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb', line 44

def pretty
  macocts = []
  mac_addr.each_byte { |o| macocts << o }
  macocts += [0] * (6 - macocts.size) if macocts.size < 6

  info = [
    ["Name"         , mac_name  ],
    ["Hardware MAC" , sprintf("%02x:%02x:%02x:%02x:%02x:%02x",
      macocts[0], macocts[1], macocts[2],
      macocts[3], macocts[4], macocts[5])],
    ["MTU"          , mtu       ],
    ["Flags"        , flags     ],
  ]

  # If all went as planned, addrs and netmasks will have the same number
  # of elements and be properly ordered such that they match up
  # correctly.
  addr_masks = addrs.zip(netmasks)

  addr_masks.select { |a| Rex::Socket.is_ipv4?(a[0]) }.each { |a|
    info << [ "IPv4 Address", a[0] ]
    info << [ "IPv4 Netmask", a[1] ]
  }
  addr_masks.select { |a| Rex::Socket.is_ipv6?(a[0]) }.each { |a|
    info << [ "IPv6 Address", a[0] ]
    info << [ "IPv6 Netmask", a[1] ]
  }

  pad = info.map{|i| i[0] }.max_by{|k|k.length}.length

  ret = sprintf(
      "Interface %2d\n" +
      "============\n",
      index
    )

  info.map {|k,v|
    next if v.nil?
    ret << k.ljust(pad) + " : #{v}\n"
  }

  ret
end