python socket.sendto

Je suis nouveau sur python(3.3) la mise en réseau de la programmation, donc pour commencer, j'ai essayé d'écrire une base traceroute programme. L'une des lignes de code est:

send_socket.sendto(512, '', (dest_name, port))

J'obtiens une erreur à cette ligne dans la console indiquant "TypeError: 'int' ne prend pas en charge la mémoire tampon d'interface". J'ai essayé avec une piqûre et j'ai eu la même erreur avec 'str' au lieu de 'int'. J'ai également regardé la documentation, et essayé quelques autres formulations en vain.

Quelqu'un a une expérience avec cela?

import socket

def main(dest_name):
    dest_addr = socket.gethostbyname(dest_name)
    port = 33434
    icmp = socket.getprotobyname('icmp')
    udp = socket.getprotobyname('udp')
    ttl = 1
    while True:
        recv_socket = socket.socket(socket.AF_INET, socket.SOCK_RAW, icmp)
        send_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, udp)
        send_socket.setsockopt(socket.SOL_IP, socket.IP_TTL, ttl)
        recv_socket.bind(('', port))
        send_socket.sendto('', (dest_name, port))
        curr_addr = None
        curr_name = None
        try:
            _, curr_addr = recv_socket.recvfrom(512)
            curr_addr = curr_addr[0]
            try:
                curr_name = socket.gethostbyaddr(curr_addr)[0]
            except socket.error:
                curr_name = curr_addr
        except socket.error:
            pass
        finally:
            send_socket.close()
            recv_socket.close()

        if curr_addr is not None:
            curr_host = '%s (%s)' % (curr_name, curr_addr)
        else:
            curr_host = '*'
        print "%d\t%s" % (ttl, curr_host)

        ttl += 1
        if curr_addr == dest_addr or ttl > max_hops:
            break

if __name__ == '__main__':
    main('www.google.com')
InformationsquelleAutor Hat | 2012-12-22