私は今私の問題について本当に混乱しています。私は、ホスト(またはサブネット)のリストを介して開いているポートを発見したい。Python - ソケットを使ったマルチスレッドではランダムな結果が得られます
だから、最初のスクリプトがエラーなしで正常に動作します
from multiprocessing.dummy import Pool as ThreadPool
from netaddr import IPNetwork as getAddrList
import socket, sys
this = sys.modules[__name__]
def threading(ip):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.settimeout(this.timeout)
failCode = 0
try:
if sock.connect_ex((str(ip), this.port)) == 0:
#port open
this.count += 1
else:
#port closed/filtered
failCode = 1
pass
except Exception:
#host unreachable
failCode = 2
pass
finally:
sock.close()
#set thread num
threads = 64
#set socket timeout
this.timeout = 1
#set ip list
ipList = getAddrList('8.8.8.0/24')
#set port
this.port = 53
#set count
this.count = 0
#threading
Pool = ThreadPool(threads)
Pool.map_async(threading, ipList).get(9999999)
Pool.close()
Pool.join()
#result
print str(this.count)
..さんは、私がこれまで何をやったかを示してみましょう。しかし、私はそれが何を印刷するかについて苦労しています。
たとえば、サブネット8.8.8.0/24
をスキャンしてポート53
を探したい場合は、オープンDNSポートを持つ唯一のサーバが8.8.8.8
(google-dns)であることはわかっています。
print str(this.count)
スクリプトのサーバ時間をランダムに実行すると(私のように..)返信0
または1
が返されます。
私は何も知っている:/24
プリントの
- スキャンのみ
8.8.8.8
版画常に1
- のみを使用しスレッド常に
1
- 使用
/24
版画ランダム0
と1
256件のスレッド - tiを変更するmeoutは助けません
私のコンピュータの遅れを引き起こすスレッディングオプションと関係があるようです。しかし、私のCPU使用率は< 10%で、ネットワーク使用量は< 50%です!
しかし、私は、通常のスレッドが互いに競合していると、ソケットが接続を取得していないので、それがあると思うだろう 0
戻りprint str(this.count)
場合、私は..理解していない別の事もあります..しかし、そのthis.count
が0
の場合、は1
(8.8.8.8
)に設定されているため、真ではありません。つまり、ポートは閉鎖されていますが、それは私のスクリプトのバグでもなければなりません。サーバーがポートであることを応答するため0
の
- 出力は次のとおりです。私はさらに私たちが知っている...それは遅れがないGoogleの。これは、サーバーの遅れによって引き起こされていること
を考えることはできません
- を閉鎖し、我々はポートがだから私はまた、私は同時に
if sock.connect_ex((str(ip), this.port)) == 0:
を実行する多くのスレッドを持っている場合、多分ホスト8.8.8.8
が間違った答え値に見えると考える間違い
開いていることを確認しています。多分それは苦労して、8.8.8.7
という応答を見るでしょう。あなたが私の言いたいことを知っていればいいと思う。
** max_socket_connectionsは
誰がソケットスレッドで経験し、私の状況を説明したり、私にこれを防ぐためにどのような答えを与えることができ、私のLinuxディストリビューション上で512に設定されていますか?
解決:
...その答えを見て..