metasploit-framework/lib/rex/proto/natpmp/packet.rb

46 lines
1.1 KiB
Ruby
Raw Normal View History

# -*- coding: binary -*-
##
#
# NAT-PMP protocol support
#
# by Jon Hart <jhart@spoofed.org>
#
##
module Rex
module Proto
module NATPMP
2013-08-30 21:28:33 +00:00
# Return a NAT-PMP request to get the external address.
2014-08-22 17:34:05 +00:00
def external_address_request
2013-08-30 21:28:33 +00:00
[ 0, 0 ].pack('nn')
end
2013-08-30 21:28:33 +00:00
# Parse a NAT-PMP external address response +resp+.
# Returns the decoded parts of the response as an array.
2014-08-22 17:34:05 +00:00
def parse_external_address_response(resp)
(ver, op, result, epoch, addr) = resp.unpack("CCnNN")
2013-08-30 21:28:33 +00:00
[ ver, op, result, epoch, Rex::Socket::addr_itoa(addr) ]
end
2013-08-30 21:28:33 +00:00
# Return a NAT-PMP request to map remote port +rport+/+protocol+ to local port +lport+ for +lifetime+ ms
2014-08-22 17:34:05 +00:00
def map_port_request(lport, rport, protocol, lifetime)
[ Rex::Proto::NATPMP::Version, # version
2013-08-30 21:28:33 +00:00
protocol, # opcode, which is now the protocol we are asking to forward
0, # reserved
lport,
rport,
lifetime
].pack("CCnnnN")
2013-08-30 21:28:33 +00:00
end
2013-08-30 21:28:33 +00:00
# Parse a NAT-PMP mapping response +resp+.
# Returns the decoded parts as an array.
2014-08-22 17:34:05 +00:00
def parse_map_port_response(resp)
resp.unpack("CCnNnnN")
2013-08-30 21:28:33 +00:00
end
end
end
end