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.

[View source]

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

[View source]

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.

[View source]

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