Exemplo n.º 1
0
def send_magic_packet(mac, broadcast='255.255.255.255', dest=None, port=9):
    """Send  a "magic packet" to the given destination mac to wakeup
    the host, if `dest` is not specified then the packet is broadcasted.

    If the `mac` address can't be parsed raise `ValueError`.

    If `dest` is not a valid domain name or ip raise `socket.error`.
    """
    try:
        if not utils.is_valid_broadcast_ip(broadcast):
            raise ValueError('Invalid broadcast %s' % broadcast)
    except TypeError:
        raise ValueError('Invalid broadcast %r' % broadcast)
    mac_digits = utils.retrive_MAC_digits(mac)
    magic_header = struct.pack('6B', *[0xff] * 6)
    magic_body = struct.pack('96B', *[int(d, 16) for d in mac_digits] * 16)
    magicpkt = magic_header + magic_body
    sok = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sok.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
    try:
        if dest is None:
            sok.connect((broadcast, port))
        else:
            sok.connect((dest, port))
        sok.send(magicpkt)
    finally:
        sok.close()
Exemplo n.º 2
0
Arquivo: wol.py Projeto: floqqi/awake
def send_magic_packet(mac, broadcast='255.255.255.255', dest=None, port=9):
    """Send  a "magic packet" to the given destination mac to wakeup
    the host, if `dest` is not specified then the packet is broadcasted.

    If the `mac` address can't be parsed raise `ValueError`.

    If `dest` is not a valid domain name or ip raise `socket.error`.
    """
    try:
        if not utils.is_valid_broadcast_ip(broadcast):
            raise ValueError('Invalid broadcast %s' % broadcast)
    except TypeError:
        raise ValueError('Invalid broadcast %r' % broadcast)
    mac_digits = utils.retrive_MAC_digits(mac)
    magic_header = struct.pack('6B', *[0xff] * 6)
    magic_body = struct.pack('96B', *[int(d, 16)
                                      for d in mac_digits] * 16)
    magicpkt = magic_header + magic_body
    sok = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sok.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
    try:
        if dest is None:
            sok.connect((broadcast, port))
        else:
            sok.connect((dest, port))
        sok.send(magicpkt)
    finally:
        sok.close()
Exemplo n.º 3
0
 def _test_chars(self, chars):
     sample_mac =  ['11'] * 6
     for separator in chars:
         test_mac = separator.join(sample_mac)
         hexdigits = utils.retrive_MAC_digits(test_mac)
         self.assertEqual(hexdigits, sample_mac)
Exemplo n.º 4
0
 def test_no_separator(self):
     test_mac = '111111111111'
     hexdigits = utils.retrive_MAC_digits(test_mac)
     self.assertEqual(hexdigits, ['11'] * 6)
Exemplo n.º 5
0
 def test_uppercase(self):
     test_mac = 'FF:FF:FF:FF:FF:FF'
     hexdigits = utils.retrive_MAC_digits(test_mac)
     self.assertEqual(hexdigits, ['FF'] * 6)
Exemplo n.º 6
0
 def test_lowercase(self):
     test_mac = 'ff:ff:ff:ff:ff:ff'
     hexdigits = utils.retrive_MAC_digits(test_mac)
     self.assertEqual(hexdigits, ['ff'] * 6)