python scapy tcp scan script(tcpスキャナ)


python scapyという強力なクラスライブラリを利用してtcpポートスキャナを書きました
げんり
指定したポートにtcpパケットflags=‘S’を送信し、そのポートがオープンであればtcpパケットflags=‘SA’に返信する.yes、簡単です.もちろんfirewallがあれば別です.
プロセス
1.パケットスナップを定義し、サブスレッドに送り込む.発注関数psの実行:このような複数のポートスキャンのスクリプトは、srまたはsrpで1つずつ送信および受信すると、非常に遅いです.スナップサブスレッドの実行を定義することをお勧めします.非常に効率的です.
code[name: tcp_scan.py]
import sys
from scapy.all import *
from threading import Thread

def scan_Fun(args):      //  tcp   flags "s"      
    ip,ports = args
    pkt = IP(dst=ip)/TCP(dport=ports,flags="S")
    send(pkt,verbose=False)
    #print(a.show())


def port_active():			//            
    def print_liver(pkt):
        if TCP in pkt and pkt[TCP].flags == 'SA':		
            retstring = '%IP.src%: '+str(pkt[TCP].sport)+'[%TCP.sport%] is open'
            return pkt.sprintf(retstring)

    sniff(filter='tcp',timeout=3,prn=print_liver)		//       ,  TCP            

def main():			
    args = sys.argv			//      ,          ,   
    if len(args) != 3:
        print('Usage: python tcp_scan.py ip start_port,end_port')
        print('for example: python tcp_scan.py 192.168.199.3 21,80')
        exit()

    start_port,end_port = args[2].split(',')
    Thread(target=port_active).start()		//          
    scan_Fun([args[1],(int(start_port),int(end_port))])		//         

if __name__ == '__main__':
    main()


実行方法
[root@local]#python tcp_scan.py 192.168.199.3 21,80