日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

Python寫安全小工具之TCP全連接端口掃描器_python

作者:??okokabcd???? ? 更新時(shí)間: 2022-07-24 編程語(yǔ)言

前言:

通過(guò)端口掃描我們可以知道目標(biāo)主機(jī)都開放了哪些服務(wù),下面通過(guò)TCP connect來(lái)實(shí)現(xiàn)一個(gè)TCP全連接端口掃描器。

一個(gè)簡(jiǎn)單的端口掃描器

#!/usr/bin/python3
# -*- coding: utf-8 -*-
from socket import *
def portScanner(host,port):
    try:
        s = socket(AF_INET,SOCK_STREAM)
        s.connect((host,port))
        print('[+] %d open' % port)
        s.close()
    except:
        print('[-] %d close' % port)
def main():
    setdefaulttimeout(1)
    for p in range(1,1024):
        portScanner('192.168.0.100',p)
if __name__ == '__main__':
    main()

說(shuō)明:

  • 原理:對(duì)不同端口進(jìn)行TCP連接,根據(jù)是否連接成功來(lái)判斷端口是否打開
  • AF_INET指定使用IPv4協(xié)議,SOCK_STREAM指定使用面向流的TCP協(xié)議
  • connect((host, port)),向指定的IP:端口發(fā)起連接
  • setdefaulttimeout(1),默認(rèn)超時(shí)時(shí)間為1秒

多線程版本

#!/usr/bin/python3
# -*- coding: utf-8 -*-
from socket import *
import threading
lock = threading.Lock()
openNum = 0
threads = []
def portScanner(host,port):
    global openNum
    try:
        s = socket(AF_INET,SOCK_STREAM)
        s.connect((host,port))
        lock.acquire()
        openNum+=1
        print('[+] %d open' % port)
        lock.release()
        s.close()
    except:
        pass
def main():
    setdefaulttimeout(1)
    for p in range(1,1024):
        t = threading.Thread(target=portScanner,args=('192.168.0.100',p))
        threads.append(t)
        t.start()     

    for t in threads:
        t.join()
    print('[*] The scan is complete!')
    print('[*] A total of %d open port ' % (openNum))
if __name__ == '__main__':
    main()

說(shuō)明:

  • 使用多線程,1、t = threading.Thread() 2、t.start() 3、t.join()
  • 多線程要保證線程安全(共享變量的一致性)就要對(duì)處理共享變量的代碼段加鎖

原文鏈接:https://juejin.cn/post/7099242579958431751

欄目分類
最近更新