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

#addrs ⇒ Object

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

#flags ⇒ Object

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

#index ⇒ Object

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_addr ⇒ Object

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_name ⇒ Object

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

#mtu ⇒ Object

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

#netmasks ⇒ Object

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

#scopes ⇒ Object

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

#ip ⇒ Object

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

#pretty ⇒ Object

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