Exemple #1
0
 def test_is_valid_broadcast_ip(self):
     valid_broadcasts = ['255.255.255.255',
                         '1.1.1.1.255',
                         '192.168.2.42',
                         '172.255.255.255',]
     for address in INVALID_BROADCASTS:
         self.assertIs(utils.is_valid_broadcast_ip(address), False)
     for address in valid_broadcasts:
         self.assertIs(utils.is_valid_broadcast_ip(address), True)
Exemple #2
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()
Exemple #3
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()