ああ、長い時間はほとんど忘れているか、マルチスレッド考えて、コードを書いていない
、以下の事項について
#1 = UTF-8符号化 インポートスレッドソケット からソケットインポート *のデフtcp_connect(IP、ポート): tcpsock = ソケット(AF_INET、SOCK_STREAM) tcpsock.settimeout( 0.5 ) してみてください: 結果 = tcpsock.connect_ex((IP、ポート)) もし(結果が== 0): 印刷(" %sの:%sの开启"%(IP、ポート)) 他: #プリント( "%sの:%sの关闭" %(IP、ポート))合格 (tcpsock.closeを)を除きます socket.errorがeと: 印刷(" 错误[!] " 、e)の デフurl_ip(URL): もし(' :// HTTP ' で URL または ' https://で' でURL): URL = URL [URL。見つける(' :// ')3 :] targetip = socket.getaddrinfo(URL、' HTTP ')[0] [4 ] [0] プリント(targetip) port_scan(targetip) 他: targetipSocket.getaddrinfo =(URL、' HTTP ')[0] [4。] [0] 印刷(TargetIP) port_scan(TargetIP) DEF port_scan(IP): 用 I におけるレンジ(200は): tcp_connect(IP、I) DEFのメイン(): 印刷 " ------------- " 印刷 " 1:IPポートスキャン" 印刷 " 2:スキャンポートURL " 印刷 」------------- " Qは = raw_inputは(" を選択:" ) IF(INT(Q)1 ==。): W = raw_input(" IP = " ) 、T = threading.Thread(対象= port_scan、引数= (W)) ()t.start 他: E = raw_input(" URL = " ) url_ip(e)の メイン( )
#!は/ usr / binに/のpython3 #- * -コーディング:UTF-8 - * - からソケットのインポート * インポートスレッド ロック = threading.Lock() openNum = 0 のスレッド = [] defのポートスキャン(ホスト、ポート): グローバルopenNum 試す: S = ソケット(AF_INET、SOCK_STREAM) s.connect((ホスト、ポート)) lock.acquire() openNum + = 1 プリント(' [+]%Dオープン'%のポート) lock.release() S。CLOSE() を除く: 通過 DEF メイン(): setdefaulttimeout( 1 ) 用のp における範囲(1,6558 ): T = threading.Thread(目標=ポートスキャン、引数=(' 14.215.177.38 ' 、P)) スレッド.append(T) t.start() のためにトンでスレッド: t.join() 印刷(' [*]スキャンが完了している!' ) 印刷(' [*]%dを開いているポートの合計'%(openNum)) であれば __name__ == ' __main__ ' : main()の
これはコルーチンです
#- * -コーディング:UTF-8 - * - #@time:2018年9月7日午前11時07分 #1 @author:gumgui #1 @file:の.pyポートスキャン インポート時間 インポートソケット から GEVENT インポートサル monkey.patch_all() インポートGEVENTは インポートgevent.pool DEF tcp_connect(IP、ポート): "" " シミュレートされたTCPコネクション" "" TCP_sock = socket.socket(はsocket.AF_INET、socket.SOCK_STREAM) TCP_sock.settimeout( 0.5) #のセットの接続タイムアウト 試し: 結果 =TCP_sock.connect_ex((IP、INT(ポート))) IF結果== 0: 印刷は、(" [*]%Sポートオープン\トン"%ポート) 他: #の印刷( "%Sポートが閉じられている[!]" %ポート) パス TCP_sock.close() を除くE AS socket.errorが: 印刷(" エラー[!]:" 、E) DEF scan_ip(): "" " スキャン対象IP " "" IPは raw_input(= 「[+]入力をスキャン対象のIP:" ) を印刷("[*]スキャン」) Scan_port(IP) DEF scan_web(): "" " スキャン先URL " "" ウェブ = raw_input(" [+]入力スキャンURL:" ) IF " HTTP:// " でのWeb または " HTTPS:// " でウェブサイト: ウェブ =ウェブ[web.find(' :// ')3 :] 印刷(ウェブ) を印刷(" [*]分析しているWebサーバIP " ) の試行: SERVER_IP =socket.gethostbyname(STR(ウェブ)) を印刷(" [*] IPサーバS%で"%のSERVER_IP) scan_port(SERVER_IP) を除くE AS例外: 印刷(" サーバーのIP取得失敗[!] " ) パス DEFのscan_port(IP ): "" " ポートスキャン" "" 印刷(" [*]ターゲットポートスキャンを開始する" ) 開始 = )(time.timeを G(50)= gevent.pool.Pool #はスレッドの数を設定 run_list = [] のためのポートでのレンジ(1200 ): run_list.append(g.spawn(tcp_connect、IP、ポート)) gevent.joinall(run_list) 終了 = time.time() 印刷(" [*]加工合計S%"%time.strftime(" %のH:%のM:%S "、time.gmtime(END- スタート))) DEF メイン(): 印刷( " "" IPポートスキャン1. URL 2.ポートスキャンを """ ) UC = INT (raw_inputは(" [+]を選択して入力します。" )) IF 1 ==。UC: scan_ip() のelif 2 ==UC: scan_web() 他: 印刷(" [!]あなたが間違いを作る" ) IF __name__ == " __main__ " : main()の