2014-12-02 2 views
1

Я пытаюсь создать скрипт python, который попросит вас об IP-адресе и будет иметь много одновременного PING.Python multithreading «ping»

Но, похоже, я могу работать только один PING в то время

Я бегу на OSX

import _thread 
import os 
import time 

def main(): 

    threadnbr = 0 

    ip = str(input("Input the ip adresse to play with? ")) 
    threads = int(input("Have many threads? ")) 

    check(ip) 

    if check(ip) == 0: 
     print("It is up") 
    else: 
     print("Is is down") 

    thread(ip, threads, threadnbr) 

def thread(ip, threads, threadnbr): 

    while threads > threadnbr: 

     _thread.start_new_thread(dos(ip)) 

     threadnbr = threadnbr + 1 

    else: 
     print(threadnbr, " started") 

def check(ip): 

    response = os.system("ping -c 1 " + ip) 

    return response 

def dos(ip): 

    os.system("ping -i 0.1 -s 8000 " + ip) 
    print("1") 

main() 

ответ

1
_thread.start_new_thread(dos(ip)) 

Вы не предоставляют аргументы правильно здесь - ваш код работает в основной теме. См. the documentation для получения более подробной информации.

Кроме того, вы должны использовать threading вместо thread. Этот модуль устарел.

Если dos означает DoS, я искренне надеюсь, что вы делаете это в образовательных целях против своей собственной инфраструктуры.

+0

Учусь IT-технологии, и мы имеем о ICMP, так что да, это для образовательных целей. Но должны ли я написать программу тогда? –

+0

@JesperPetersen вы * вероятно * хотели написать '_thread.start_new_thread (dos, (ip,))' – goncalopp

+1

Есть ли у меня это снова? –

1

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

import threading 
from scapy.all import * 

def send_pkt(dst,padding=0): 
    pkt  = IP(dst=dst)/ICMP()/Padding('\x00'*padding) 
    ans,unans = sr(pkt) 
    ans.summary(lambda (s,r): r.sprintf("%IP.src% is alive")) 


def thread(dst, threads, threadnbr): 

    while threads > threadnbr: 
     t = threading.Thread(None, send_pkt, None, (dst,), {'padding':8000}) 
     t.start() 
     threadnbr = threadnbr + 1 
    else: 
     print(threadnbr, " started") 


def main(): 
    dst  = raw_input("Input the ip adresse to play with? ") 
    threads = int(raw_input("Have many threads? ")) 
    threadnbr = 0 

    send_pkt(dst) 

    thread(dst, threads, threadnbr) 

main() 
Смежные вопросы