2016-08-18 88 views
-2
##################################### 
# Portscan TCP   # 
# # 
##################################### 
# -*- coding: utf-8 -*- 
#!/usr/bin/python3 
import socket 

ip = input("Digite o IP ou endereco: ") 

ports = [] 
count = 0 

while count < 10: 
    ports.append(int(input("Digite a porta: "))) 
    count += 1 


for port in ports: 
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    client.settimeout(0.05) 
    code = client.connect_ex((ip, port)) #conecta e traz a msg de erro 
#Like connect(address), but return an error indicator instead of raising an exception for errors 
    if code == 0: #0 = Success 
     print (str(port) + " -> Porta aberta") 
    else: 
     print (str(port) + " -> Porta fechada") 

print ("Scan Finalizado") 

上面的python腳本是TCP掃描。我如何將其更改爲TCP SYN掃描?如何使用方法(TCP SYN)創建端口掃描程序TCP SYN?如何使用方法(TCP SYN)創建端口掃描程序TCP SYN?

+2

嗯,這不僅僅是試圖連接不同的一點。你將不得不採取自己的方法,並提出一個*精確的問題! –

回答

3

正如@Upsampled提到的,你可能會因爲你只需要TCP協議的子集使用原始套接字(https://en.wikipedia.org/)(發送SYN 收到RST-ACKSYN-ACK )。

由於編碼類似http://www.binarytides.com/raw-socket-programming-in-python-linux/ 可能是一個很好excersice,我還建議考慮https://github.com/secdev/scapy

Scapy的是一個強大的基於Python的交互操作的分組方案 和圖書館。

下面是已經實現了一個簡單的端口掃描器 http://pastebin.com/YCR3vp9B和詳細的文章的代碼示例它做什麼: http://null-byte.wonderhowto.com/how-to/build-stealth-port-scanner-with-scapy-and-python-0164779/

的代碼是一個有點難看,但它的工作原理 - 我已經檢查了它從我的本地Ubuntu PC反對我的VPS。 這裏是最重要的代碼段(略作調整,以符合PEP8):

# Generate Port Number 
srcport = RandShort() 

# Send SYNC and receive RST-ACK or SYN-ACK 
SYNACKpkt = sr1(IP(dst=target)/
       TCP(sport=srcport, dport=port, flags="S")) 

# Extract flags of received packet 
pktflags = SYNACKpkt.getlayer(TCP).flags 

if pktflags == SYNACK: 
    # port is open 
    pass 
else: 
    # port is not open 
    # ... 
    pass 
3

首先,您將不得不使用RAW套接字生成自己的SYN數據包。您可以找到一個示例here

其次,您需要偵聽來自掃描主機的SYN-ACK,以確定哪些端口實際嘗試啓動TCP握手(SYN,SYN-ACK,ACK)。您應該能夠從響應的應用程序中檢測並解析TCP標頭。從這個頭文件你可以確定原始端口,從而找出一個偵聽應用程序。

此外,如果你實現這個,你基本上也做了一個SYN DDOS工具,因爲你將創建大量的半開tcp連接。