TCP埠掃瞄器

2021-08-25 08:07:29 字數 2684 閱讀 1105

乙個基於python3的tcp埠掃瞄器

原理:就是和不同的埠進行tcp連線,能連線成功就表示此埠是開放的,不能連線成就表示此埠是關閉的。

import socket

import re

import threading

import time

lock = threading.lock()

threads = list()

ports_list = list()

def judge_hostname_or_ip(target_host):

# 判斷輸入的是網域名稱還是ip位址

result = re.match(

r"^(\d|[1-9]\d|1\d\d|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.(\d|[1-9]\d|1\d\d|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\."

"(\d|[1-9]\d|1\d\d|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.(\d|[1-9]\d|1\d\d|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$",

target_host)

if result:

# print(result.group())

return result.group()

else:

try:

socket.setdefaulttimeout(1)

ip = socket.gethostbyname(target_host)

return ip

except exception as e:

exit()

def parse_port(ports):

"""把連線符-傳輸過來的值解析為對應的數字 埠範圍1-65535"""

if ports:

try:

res = re.match(r'(\d+)-(\d+)', ports)

if res:

if int(res.group(2)) > 65535:

print("末尾埠輸入有誤!!....請新輸入")

exit()

return range(int(res.group(1)), int(res.group(2)))

except:

print("埠解析錯誤.....請正確輸入埠範圍")

exit()

else:

return [19, 21, 22, 23, 25, 31, 42, 53, 67, 69, 79, 80, 88, 99, 102, 110, 113, 119, 220, 443]

def test_port(host, port):

"""測試埠是否開啟"""

try:

s = socket.socket(socket.af_inet, socket.sock_stream)

s.connect((host, port))

lock.acquire() # 加執行緒鎖

print("{}, {}埠開啟".format(host, port))

except:

lock.acquire()

finally:

lock.release()

s.close()

def main():

ip = judge_hostname_or_ip(input("請輸入網域名稱或者ip:"))

l = parse_port(input("請輸入埠範圍如: 1-1024 [不輸入直接回車預設掃瞄常見埠]:"))

t1 = time.time()

# 每個套接字的最大超時時間

socket.setdefaulttimeout(3)

# 開啟執行緒來測試

for port in l:

t = threading.thread(target=test_port, args=(ip, port))

t.start()

for t in threads:

t.join() # 等待執行緒全部執行完畢

t2 = time.time()

print("總共耗時:", t2 - t1)

print("ip:{}, 有{},共{}個端埠開啟".format(ip, ports_list, len(ports_list)))

if __name__ == '__main__':

main()

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

2、tcp syn掃瞄:也稱為半開放掃瞄,這種方式將傳送乙個syn包,啟動乙個tcp會話,並等待目標響應資料報。如果收到的是乙個rst包,則表明埠是關閉的,而如果收到的是乙個syn/ack包,則表示相應的埠是開啟的。

3、tcp fin掃瞄:這種方式傳送乙個表示拆除乙個活動的tcp連線的fin包,讓對方關閉連線。如果收到了乙個rst包,則表明相應的埠是關閉的。

4、tcp xmas掃瞄:這種方式通過傳送psh、fin、urg、和tcp標誌位被設為1的資料報。如果收到了乙個rst包,則表明相應的埠是關閉的

參考文章:

TCP程式設計 埠掃瞄器

對於單執行緒的埠掃瞄可參考如下 using system using system.windows.forms using system.net using system.net.sockets namespace portscan 自定義變數 private int port 記錄當前掃瞄的埠號 ...

埠掃瞄器(masscan)

s.exe號稱史上最快 3分鐘掃完全網 掃瞄器小巧而精緻,大小僅僅8k,但是使用上有諸多限制,例如僅支援再winserver2003 上無條件使用,放到其它系統上就要對系統做一些配置,不然無法支援syn方式掃瞄,這顯然不夠友好。nmap掃瞄器,能探知系統型別是否存活等,但是同時獲得更詳細的資訊也就意...

Go埠掃瞄器

這次呢,咱們來實現乙個簡單的tcp埠掃瞄器!也來體驗一下黑客的風采!我們在使用tcp進行連線時,需要知道對方機器的ip port 連線成功的話,流程如下。有正常,就有失敗,如果被連線方關閉的話,流程如下。還有一種可能是,埠開放,但是 防火牆攔截,流程如下。本質理解之後,就可以開始擼 了。在go中,我...