一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - 使用Python3制作TCP端口掃描器

使用Python3制作TCP端口掃描器

2020-09-29 10:17高海峰 Python

本文給大家分享的是使用Python3 實現TCP全連接端口掃描器的制作過程,包括思路和代碼,非常簡單易懂,推薦給大家

在滲透測試的初步階段通常我們都需要對攻擊目標進行信息搜集,而端口掃描就是信息搜集中至關重要的一個步驟。通過端口掃描我們可以了解到目標主機都開放了哪些服務,甚至能根據服務猜測可能存在某些漏洞。 TCP端口掃描一般分為以下幾種類型:

TCP connect掃描:也稱為全連接掃描,這種方式直接連接到目標端口,完成了TCP三次握手的過程,這種方式掃描結果比較準確,但速度比較慢而且可輕易被目標系統檢測到。

TCP SYN掃描:也稱為半開放掃描,這種方式將發送一個SYN包,啟動一個TCP會話,并等待目標響應數據包。如果收到的是一個RST包,則表明端口是關閉的,而如果收到的是一個SYN/ACK包,則表示相應的端口是打開的。

Tcp FIN掃描:這種方式發送一個表示拆除一個活動的TCP連接的FIN包,讓對方關閉連接。如果收到了一個RST包,則表明相應的端口是關閉的。

TCP XMAS掃描:這種方式通過發送PSH、FIN、URG、和TCP標志位被設為1的數據包。如果收到了一個RST包,則表明相應的端口是關閉的。

下面我們將使用Python3 實現TCP全連接端口掃描器,下面進入編程環節。

編碼實戰

全連接掃描方式的核心就是針對不同端口進行TCP連接,根據是否連接成功來判斷端口是否打開,現在我們來實現一個最簡單的端口掃描器:

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/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()

 

這段代碼的核心就是portScanner函數,從其中的內容可以看出,只是進行了簡單的TCP連接,如果連接成功則判斷為端口打開,否則視為關閉。 我們來看一下運行結果:

使用Python3制作TCP端口掃描器

這樣的掃描看起來效率太低了,實際也確實很慢,因為我們設置了默認的超時時間為1秒,這要是掃描10000個端口,豈不是要等到花都謝了? 最簡單的辦法就是用多線程來提高效率,雖然python的多線程有點太弱了,不過至少可以利用我們等待的時間去干點別的。另外之前掃描的端口比較多, 顯示的信息我們看起來不方便,這次我們只顯示我們關心的打開的端口,并將打開端口的數量在掃描結束的時候顯示出來。

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/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()

 

運行看一下效果,如下圖:

使用Python3制作TCP端口掃描器

這下看起來是不是方便多了?至此效率上的問題解決了,現在我們還需要為掃描器增加一個 參數解析的功能,這樣才能看起來像個樣子,總不能每次都改代碼來修改掃描目標和端口吧!

參數解析我們將用python3自帶的標準模塊argparse,這樣我們就省去了自己解析字符串的麻煩! 下面來看代碼:

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/usr/bin/python3
# -*- coding: utf-8 -*-
from socket import *
import threading
import argparse
 
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():
  p = argparse.ArgumentParser(description='Port scanner!.')
  p.add_argument('-H', dest='hosts', type=str)
  args = p.parse_args()
  hostList = args.hosts.split(',')
  setdefaulttimeout(1)
  for host in hostList:
    print('Scanning the host:%s......' % (host))
    for p in range(1,1024):
      t = threading.Thread(target=portScanner,args=(host,p))
      threads.append(t)
      t.start()  
 
    for t in threads:
      t.join()
 
    print('[*] The host:%s scan is complete!' % (host))
    print('[*] A total of %d open port ' % (openNum))
 
if __name__ == '__main__':
  main()

 

看一下運行效果,如下圖:

使用Python3制作TCP端口掃描器

至此我們的端口掃描器就基本完成了,雖然功能比較簡單,旨在表達端口掃描器的基本實現思路! 至于更詳細的功能可以基于這個基本結構來逐步完善!

小結

本節主要講解了Python3實現一個簡單的端口掃描器的過程,本次實驗采用了Tcp全連接的方式,不斷嘗試連接主機的端口來判斷端口的開放情況,雖然存在一些缺點, 不過這種方式最適合初學者學習,至于更復雜的方式以后學習起來也不會很難。想舉一反三的朋友可以根據協議和端口的對照關系來完成掃描時同時輸出協議, 這樣看起來會更好一些,至于更詳細的功能就留給大家做練習了!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 高清在线观看免费入口 | 爆操俄罗斯美女 | 亚洲国产欧美在线成人aaaa | 久久精品黄AA片一区二区三区 | 欧美办公室silkstocking | 免费观看一级欧美在线视频 | 禁止的爱善良的未删减版hd | 白丝校花被扒开双腿喷水小说 | 日本黄a | 日韩欧美在线看 | 亚洲成人免费 | 亚洲国产欧美目韩成人综合 | 天天摸天天操天天爽 | 免费高清在线观看 | 日韩一区视频在线 | 久久se精品一区二区国产 | 波多野结衣之双方调教在线观看 | 亚洲成年| www国产91| 美女靠逼的视频 | 国产毛片在线高清视频 | 午夜福利理论片高清在线 | 男人使劲躁女人小视频 | 成人免费片 | 大肚孕妇的高h辣文 | 爱情岛论坛亚洲一号路线 | a男人天堂 | 欧美日韩看看2015永久免费 | 国产精品自产拍在线观看2019 | 教练你好大轻点漫 | avav一区 | 国产资源免费 | 脱了白丝校花的内裤猛烈进入 | 性欧美13处丶14处 | 日本嫩小xxxxhd | 日产精品一二三四区国产 | 国产精品香蕉一区二区三区 | 男人j桶进女人p桶爽 | 成人午夜视频一区二区国语 | 天天射天天舔 | 日本一区二区免费在线观看 |