ホームページ バックエンド開発 Python チュートリアル Pythonを使った簡単なポートスキャナーの実装方法の紹介

Pythonを使った簡単なポートスキャナーの実装方法の紹介

Mar 15, 2017 pm 01:37 PM
python

インターネット上のいくつかの情報に基づいて、Pythonソケットプログラミングの練習と見なすことができるいくつかの新しいコンテンツを追加しました。

#coding=utf-8
import socket
import time
import sys
import struct
import threading
from threading import Thread,activeCount

results=[]
def portScanner(ip,port):
    server = (ip,port)
    sockfd = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    sockfd.settimeout(0.1)          #设置阻塞模式下socket的超时时间
    ret = sockfd.connect_ex(server)  #成功返回0,失败返回error的值。
    if not ret:
        sockfd.close()
        results.append([ip,port])
        #print '%s:%s is opened...' % (ip,port)
    else:
        sockfd.close()
        pass
    return ''
    

def ip2num(ip):         #将ip地址转换成数字
    lp = [int(x) for x in ip.split('.')]
    return lp[0] << 24 | lp[1] << 16 | lp[2] << 8 |lp[3]

def num2ip(num):
    ip = [&#39;&#39;,&#39;&#39;,&#39;&#39;,&#39;&#39;]
    ip[3] = (num & 0xff)
    ip[2] = (num & 0xff00) >> 8
    ip[1] = (num & 0xff0000) >> 16
    ip[0] = (num & 0xff000000) >> 24
    return &#39;%s.%s.%s.%s&#39; % (ip[0],ip[1],ip[2],ip[3])

def iprange(ip1,ip2):
    num1 =socket.ntohl(struct.unpack("I",socket.inet_aton(str(ip1)))[0])
    num2 =socket.ntohl(struct.unpack("I",socket.inet_aton(str(ip2)))[0])
    tmp = num2 - num1
    if tmp < 0:
        return None
    else:
        return num1,num2,tmp


if name == &#39;main&#39;:

    if((len(sys.argv)!= 4)&(len(sys.argv)!= 2)):   #用法说明
        print &#39;Usage:\n\tscanner.py startip endip port&#39;
        print &#39;\tscanner.py ip&#39;
        sys.exit()

    if len(sys.argv)==4:            #对某一IP段的扫描
        time_start=time.time()        #起始时间
        startip = sys.argv[1]        #起始IP
        endip = sys.argv[2]            #结束IP
        port = int(sys.argv[3])        #端口号

        res = iprange(startip,endip)
        if not res:
            print &#39;endip must be bigger than startone&#39;
            sys.exit()
        elif res[2] == 0:
            portScanner(startip,port)
        else:
            for x in xrange(int(res[2])+1):        #IP地址依次递增
                startipnum = ip2num(startip)
                startipnum = startipnum + x
                if activeCount() <=1000:                      
                    Thread(target=portScanner,args=(num2ip(startipnum),port)).start()
                
        print "There are %d hosts." %len(results)
        results.sort()
        for ip,port in results:
            print "%s:%d is opened..." %(ip,port)
        times=time.time()-time_start            #用时
        print &#39;use time : %s&#39; % times
                
    if len(sys.argv)==2:
        time_start=time.time()
        port=0
        ip=sys.argv[1]
        while(port<2000):
            if activeCount() <= 40:     #设置40线程扫描
                Thread(target = portScanner, args = (ip, port)).start()
                port=port+1
        results.sort()
        for ip,port in results:
            print "%s:%d is opened..." %(ip,port)
        times=time.time()-time_start
        print &#39;use time : %s&#39; % times
ログイン後にコピー

効果は次のとおりです:

Pythonを使った簡単なポートスキャナーの実装方法の紹介

Pythonを使った簡単なポートスキャナーの実装方法の紹介

以上がPythonを使った簡単なポートスキャナーの実装方法の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Deepseek Xiaomiをダウンロードする方法 Deepseek Xiaomiをダウンロードする方法 Feb 19, 2025 pm 05:27 PM

Deepseek Xiaomiをダウンロードする方法

テンプレートのメリットとデメリットは何ですか? テンプレートのメリットとデメリットは何ですか? May 08, 2024 pm 03:51 PM

テンプレートのメリットとデメリットは何ですか?

Google AI、開発者向けに Gemini 1.5 Pro と Gemma 2 を発表 Google AI、開発者向けに Gemini 1.5 Pro と Gemma 2 を発表 Jul 01, 2024 am 07:22 AM

Google AI、開発者向けに Gemini 1.5 Pro と Gemma 2 を発表

わずか 250 ドルで、Hugging Face のテクニカル ディレクターが Llama 3 を段階的に微調整する方法を教えます わずか 250 ドルで、Hugging Face のテクニカル ディレクターが Llama 3 を段階的に微調整する方法を教えます May 06, 2024 pm 03:52 PM

わずか 250 ドルで、Hugging Face のテクニカル ディレクターが Llama 3 を段階的に微調整する方法を教えます

いくつかの .NET オープンソース AI および LLM 関連プロジェクト フレームワークを共有する いくつかの .NET オープンソース AI および LLM 関連プロジェクト フレームワークを共有する May 06, 2024 pm 04:43 PM

いくつかの .NET オープンソース AI および LLM 関連プロジェクト フレームワークを共有する

golang 関数のデバッグと分析の完全ガイド golang 関数のデバッグと分析の完全ガイド May 06, 2024 pm 02:00 PM

golang 関数のデバッグと分析の完全ガイド

どうやって彼にdeepseekに尋ねますか どうやって彼にdeepseekに尋ねますか Feb 19, 2025 pm 04:42 PM

どうやって彼にdeepseekに尋ねますか

評価関数の保存方法 評価関数の保存方法 May 07, 2024 am 01:09 AM

評価関数の保存方法

See all articles