<div dir="ltr">2013/8/18 Remo The Last <span dir="ltr"><<a href="mailto:py.remothelast@yahoo.it" target="_blank">py.remothelast@yahoo.it</a>></span><br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<div><div style="font-size:12pt;font-family:'times new roman','new york',times,serif"><div><br></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:'times new roman','new york',times,serif">

ciao a tutta la lista.</div><div>Vorrei chiedere il seguente presentando la situazione.</div><div><br></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:'times new roman','new york',times,serif">

La nostra rete è cresciuta a dismisura e dobbiamo riorganìzzare i client con i vari punti di accesso.</div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:'times new roman','new york',times,serif">

In pratica mi è stato chiesto (secondo alcune ragioni) di effettuare una scansione della sottorete <a href="http://10.0.0.0/8" target="_blank">10.0.0.0/8</a> ed elencare gli IP privati attivi con
 alcuni loro servizi.</div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:'times new roman','new york',times,serif">Ebbene, mi sono subito rivolto al grandioso nmap che però ha un difetto: si 'pappa' tutte le risorse del nostro server mandandolo in crash se al server vengono richieste risorse aggiuntive. E ha crashato ben due volte. Il 'serverone' è un quad-core Xeon con OS Centos 5 che può richiedere - se vuole - risorse supplementari ad altre macchine sorelle. Ho lanciato nmap da una altro serverone con OS Centos 6 e ha crashato anch'esso.<br>

</div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:'times new roman','new york',times,serif">Ho dunque implementato uno scanner in python (utilizzando i thread) e ho vissuto un limite di python stesso: python non può creare più di circa 1000 threads al secondo e esce dallo script
 con errore tipo "can't create a new thread". Da questo ho limitato il numero di thread/sec a 512 con una gestione massima di thread attivi a 2048 (per altro codice).</div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:'times new roman','new york',times,serif">

Resta però che una sottorete 10/0 è immensa e anche se non ho fretta, 512 thread al secondo sono pochi. E mi sono informato sul multiprocessing in python. <br></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:'times new roman','new york',times,serif">

Da qui la domanda per chi ha esperienza: se volessi implementare uno scanner utilizzando il multiprocessing di python invece che i thread, avrei lo stesso limite al numero di processi da creare di circa 1000/sec o posso creare un numero di processi superiore e dunque uscirmene più velocemente da questo dovere di
 scansione della 10/8? </div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:'times new roman','new york',times,serif"><br></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:'times new roman','new york',times,serif">

Per favore, che la risposta non sia "crea codice e testa il tutto" in quanto comunque sarebbe un impegno lungo e magari qualcuno ha già esperienza in tal senso ... e magari il problema del limite resta lo stesso anche utilizzando il multiprocessing.</div>

</div></div></blockquote><div> </div><div>Di preciso con lo script corrente come determini se una macchina è up? </div><div>La pinghi? Come di preciso? Utilizzando ICMP tramite un socket raw?</div><div>L'approccio asincrono è in genere la cosa più indicata per far scalare (di molto) applicativi di questo tipo ma a questo livello (socket raw) forse Twisted & co. non forniscono strumenti utili (potrei sbagliarmi).</div>

<div>In tal caso puoi usare direttamente epoll() (<a href="http://docs.python.org/2/library/select.html#epoll-objects">http://docs.python.org/2/library/select.html#epoll-objects</a>).</div><div><br></div><div>--- Giampaolo</div>

<div><div><a href="https://code.google.com/p/pyftpdlib/">https://code.google.com/p/pyftpdlib/</a></div><div><a href="https://code.google.com/p/psutil/">https://code.google.com/p/psutil/</a></div><div><a href="https://code.google.com/p/pysendfile/">https://code.google.com/p/pysendfile/</a></div>

</div></div></div></div>