Class: Rex::Socket::UnitTest

Inherits:
Test::Unit::TestCase
  • Object
show all
Defined in:
lib/rex/socket.rb.ut.rb

Instance Method Summary collapse

Instance Method Details

#test_bit2netmaskObject



89
90
91
92
93
94
95
# File 'lib/rex/socket.rb.ut.rb', line 89

def test_bit2netmask
  assert_equal("255.255.255.255", Rex::Socket.bit2netmask(32))
  assert_equal("255.255.255.254", Rex::Socket.bit2netmask(31))
  assert_equal("255.255.255.240", Rex::Socket.bit2netmask(28))
  assert_equal("255.255.255.0", Rex::Socket.bit2netmask(24))
  assert_equal("255.255.0.0", Rex::Socket.bit2netmask(16))
end

#test_createObject



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/rex/socket.rb.ut.rb', line 21

def test_create
  port = 64442
  serv = TCPServer.new('127.0.0.1', port)

  sock = nil
  assert_nothing_raised {
    sock = Rex::Socket.create(
      'PeerHost' => '127.0.0.1',
      'PeerPort' => port,
      'Proto'    => 'tcp')
  }
  assert_kind_of(Rex::Socket::Tcp, sock, "socket factory creation")

  sock = nil
  assert_nothing_raised {
    sock = Rex::Socket.create_tcp(
      'PeerHost' => '127.0.0.1',
      'PeerPort' => port)
  }
  assert_kind_of(Rex::Socket::Tcp, sock, "tcp socket factory creation")

  serv.close
end

#test_from_sockaddrObject



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/rex/socket.rb.ut.rb', line 60

def test_from_sockaddr
  # 1.9.1 raises ArgumentError if we don't have an af == AF_INET or AF_INET6
  af, host, port = Rex::Socket.from_sockaddr(([2, 0] + [0]*12).pack('snC*'))
  assert_equal(2, af, "af = 2")
  assert_equal('0.0.0.0', host, "zero host")
  assert_equal(0, port, "zero port")

  af, host, port = Rex::Socket.from_sockaddr(([2, 22]+[0]*12).pack('snC*'))
  assert_equal(2, af, "af = 2")
  assert_equal(22, port, "port = 22")
  assert_equal('0.0.0.0', host, "zero host")

  af, host, port = Rex::Socket.from_sockaddr(([2, 22, 1, 2, 3, 4] + [0]*8).pack('snC*') )
  assert_equal(2, af, "af = 2")
  assert_equal('1.2.3.4', host, "host = '1.2.3.4'")
  assert_equal(22, port, "port = 22")
end

#test_ipObject



12
13
14
15
16
17
18
19
# File 'lib/rex/socket.rb.ut.rb', line 12

def test_ip
  assert_equal(true,Rex::Socket.dotted_ip?('0.0.0.0'), 'valid IP min')
  assert_equal(true,Rex::Socket.dotted_ip?('255.255.255.255'), 'valid IP max')
  assert_equal(false,Rex::Socket.dotted_ip?('0.0.0.0.0'), 'too many sections')
  assert_equal(false,Rex::Socket.dotted_ip?('0..0.0.0'), 'too many dots')
  assert_equal(false,Rex::Socket.dotted_ip?('00.0.0'), 'not enough dots')
  assert_equal(false,Rex::Socket.dotted_ip?('256.256.256.256'), 'numbers too big')
end

#test_is_internalObject



97
98
99
100
101
102
103
104
105
106
# File 'lib/rex/socket.rb.ut.rb', line 97

def test_is_internal
  assert( ! Rex::Socket.is_internal?("1.2.3.4"))
  assert( ! Rex::Socket.is_internal?("172.15.3.4"))
  assert( ! Rex::Socket.is_internal?("172.32.3.4"))
  assert(Rex::Socket.is_internal?("10.2.3.4"))
  assert(Rex::Socket.is_internal?("192.168.3.4"))
  16.upto(31) do |octet|
    assert(Rex::Socket.is_internal?("172.#{octet}.3.4"))
  end
end

#test_net2bitmaskObject



82
83
84
85
86
87
# File 'lib/rex/socket.rb.ut.rb', line 82

def test_net2bitmask
  assert_equal(32, Rex::Socket.net2bitmask('255.255.255.255'))
  assert_equal(28, Rex::Socket.net2bitmask('255.255.255.240'))
  assert_equal(24, Rex::Socket.net2bitmask('255.255.255.0'))
  assert_equal(16, Rex::Socket.net2bitmask('255.255.0.0'))
end

#test_resolv_nboObject



78
79
80
# File 'lib/rex/socket.rb.ut.rb', line 78

def test_resolv_nbo
  assert_equal("\x04\x03\x02\x01", Rex::Socket.resolv_nbo("4.3.2.1"))
end

#test_to_sockaddrObject



45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/rex/socket.rb.ut.rb', line 45

def test_to_sockaddr
  assert_equal(([2] + [0]*14).pack("sC*"), Rex::Socket.to_sockaddr(0, 0), "null sockaddr")
=begin
# This is platform dependent, pain to test
  if (Rex::Socket.support_ipv6?)
    # Use the constant for AF_INET6 since it is different per platform
    # (10 on linux and 28 on BSD)
    inaddr_any_sockaddr = ([::Socket::AF_INET6, 22] + [0]*24).pack('sSC*')
  else
    inaddr_any_sockaddr = ([2, 22] + [0]*12).pack('snC*')
  end
=end

  assert_equal(([2, 0x16, 1, 2, 3, 4] + [0]*8).pack('snC*'), Rex::Socket.to_sockaddr("1.2.3.4", 22), "1.2.3.4 addr, port 22 sockaddr")
end