2015-04-10 4 views
0

Хорошо, все изменилось, чтобы задать более конкретный вопрос.Создание Python Pinger - Розетки

У меня есть два метода. doOnePing было моим творением, чтобы использовать sendOnePing, который был написан для меня, чтобы лучше понять сокеты.

Я пытаюсь понять, правильно ли я создаю сокет правильно в doOnePing, но я не уверен, что я упускаю что-то конкретное или могу сделать это лучше.

Благодаря

def sendOnePing(mySocket, destAddr, ID): 
    # Header is type (8), code (8), checksum (16), id (16), sequence (16) 

    myChecksum = 0 
    # Make a dummy header with a 0 checksum 
    # struct -- Interpret strings as packed binary data 
    header = struct.pack("bbHHh", ICMP_ECHO_REQUEST, 0, myChecksum, ID, 1) 
    data = struct.pack("d", time.time()) 
    # Calculate the checksum on the data and the dummy header. 
    myChecksum = checksum(header + data) 

    # Get the right checksum, and put in the header 
    if sys.platform == 'darwin': 
     # Convert 16-bit integers from host to network byte order 
     myChecksum = htons(myChecksum) & 0xffff 
    else: 
     myChecksum = htons(myChecksum) 

    header = struct.pack("bbHHh", ICMP_ECHO_REQUEST, 0, myChecksum, ID, 1) 
    packet = header + data 

    mySocket.sendto(packet, (destAddr, 1)) # AF_INET address must be tuple, not str 


# Both LISTS and TUPLES consist of a number of objects 
# which can be referenced by their position number within the object. 

def doOnePing(destAddr, timeout): 
    icmp = getprotobyname("icmp") 
    # SOCK_RAW For more details: http://sock-raw.org/papers/sock_raw 

    # Fill in start 

    mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

    #Fill in end 


    myID = os.getpid() & 0xFFFF # Return the current process i 
    sendOnePing(mySocket, destAddr, myID) 
    delay = receiveOnePing(mySocket, myID, timeout, destAddr) 

    mySocket.close() 
    return delay 
+3

Вы задаете кучу вопросов здесь. Вам нужно разбить их, чтобы они отвечали. Найдите небольшую область SPECIFIC, в которой вам нужна помощь, а затем покажите нам, что –

+0

Кроме того, если вы новичок в Python, попробуйте проработать простые вещи, вместо того, чтобы входить в исчерпывающие и, как вы говорите, запутывающие инициативы. – Zizouz212

+0

Хорошо, да, я понимаю, что ... Наверное, я довольно смущен вообще. Было бы лучше, если бы я задал конкретный вопрос об одном конкретном методе? – TheCrownedPixel

ответ

0

Рассмотрите возможность использования scapy вместо пинга. Вы можете легко получить scapy, запустив:

pip install scapy 

помощью этого вы могли бы свистеть гораздо легче

Смежные вопросы