亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

  • TCP Connect掃描

TCP Connect掃描又叫做全連接掃描,客戶端與服務(wù)器建立 TCP 連接要進行一次三次握手,如果進行了一次成功的三次握手,則說明端口開放。 假設(shè)客戶端想與服務(wù)端的80端口進行通信,首先客戶端會發(fā)送一個帶有SYN標識和端口號的TCP數(shù)據(jù)包給服務(wù)器,如果服務(wù)器這個端口是開放的,則會接受這個連接并返回一個帶有SYN和ACK標識的數(shù)據(jù)包給客戶端,隨后客戶端會發(fā)送帶有ACK和RST標識的數(shù)據(jù)包給服務(wù)點,此時客戶端與服務(wù)器建立了連接。

Python 實現(xiàn)端口掃描

 

當客戶端發(fā)送一個帶有 SYN 標識和端口號的 TCP 數(shù)據(jù)包給服務(wù)器后,如果服務(wù)器端返回一個帶 RST 標識的數(shù)據(jù)包,則說明端口處于關(guān)閉狀態(tài)。

Python 實現(xiàn)端口掃描

 

  • 實現(xiàn)代碼
# #!/usr/bin/Python/ target=_blank class=infotextkey>Python3
#sacn.py
# python3 TCP 連接掃描

import sys
from socket import *
import time

#統(tǒng)計端口開啟數(shù)量
open_num = 0
def scan(ip,port):
    global open_num
    try:
        s = socket(AF_.NET,SOCK_STREAM)
        s.connect((ip,port))
        open_num+=1
        print('{0} port {1} is open'.format(ip, port))
    except Exception as err:
        #print('{0} port {1} is close'.format(ip,port))
        pass
    finally:
        s.close()



def main():
    #設(shè)置超時時間,秒為單位
    setdefaulttimeout(1)
    #獲取第一個參數(shù)為主機名稱
    host = sys.argv[1]
    #獲取端口區(qū)間
    ports= sys.argv[2].split('-')
    start_pt = int(ports[0])
    end_pt = int(ports[1])
    #獲取主機IP地址
    target_ip = gethostbyname(host)
    #開始計時
    start_time = time.time()
    for port in range(start_pt,end_pt):
        scan(target_ip,port)
    #計時結(jié)束
    end_time = time.time()
    #輸出存活端口數(shù)量
    print('存活端口%d 個'%(open_num))
    #輸出掃描耗費市場
    print('總共用時{:.2f}秒'.format(end_time-start_time))

if __name__=='__main__':
    main()

上述代碼實現(xiàn)了TCP connect單線程掃描功能,如果全端口掃描將會超級慢,下面引入多線程改造。

  • 多線程操作實現(xiàn)
#!/usr/bin/python3

# python3 TCP 連接掃描

import sys
from socket import *
import time
import threading

lock = threading.Lock()
threads =[]
open_num = 0

setdefaulttimeout(1)
def scan(ip,port):
    global open_num
    try:
        s = socket(AF_INET,SOCK_STREAM)
        s.connect((ip,port))
        lock.acquire()
        open_num+=1
        print('{0} port {1} is open'.format(ip, port))
        lock.release()
    except Exception as err:
        #print('{0} port {1} is close'.format(ip,port))
        pass
    finally:
        #lock.release()
        s.close()



def main():
    host = sys.argv[1]
    ports= sys.argv[2].split('-')
    start_pt = int(ports[0])
    end_pt = int(ports[1])
    target_ip = gethostbyname(host)
    start_time = time.time()
    for port in range(start_pt,end_pt):
        t = threading.Thread(target=scan,args=(target_ip,port))
        threads.Append(t)
        t.start()
        #scan(target_ip,port)

    for t in threads:
        t.join()
    end_time = time.time()
    print('存活端口 %d 個'%(open_num))
    print('總共用時{:.2f}秒'.format(end_time-start_time))

if __name__=='__main__':
    main()
  • 相同掃描執(zhí)行時間對比
moke@moke:~/moke_python$ python3 scan.py www.jd.com 22-28
218.203.117.211 port 25 is open
存活端口1 個
總共用時5.01秒
moke@moke:~/moke_python$ python3 scan_thread.py www.jd.com 22-28
218.203.111.82 port 25 is open
存活端口 1 個
總共用時1.00秒
  • 本章節(jié)知識點
1.socket:Socket 是在應用層和傳輸層之間的一個抽象層,它把 TCP/IP 層復雜的操作抽象為幾個簡單的接口,供應用層調(diào)用實現(xiàn)進程在網(wǎng)絡(luò)中的通信。
2.threading:多線程
  • 下一講內(nèi)容

python多線程

分享到:
標簽:端口掃描
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定