2016-08-18 4 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, вы можете использовать сырые сокеты (https://en.wikipedia.org/), как вам нужно только подмножество протокола TCP (отправить SYN и получать RST-ACK или SYN-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 против моего 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

Во-первых, вам нужно будет сгенерировать свои собственные пакеты SYN, используя RAW-сокеты. Вы можете найти пример here

Во-вторых, вам нужно будет прослушать SYN-ACK с отсканированного хоста, чтобы определить, какие порты на самом деле пытаются запустить TCP Handshake (SYN, SYN-ACK, ACK). Вы должны иметь возможность обнаруживать и анализировать заголовок TCP из приложений, которые отвечают. Из этого заголовка вы можете определить порт происхождения и, таким образом, выяснить, какое приложение для прослушивания было там.

Также, если вы реализуете это, вы также в основном сделали утилиту SYN DDOS, потому что вы создадите тонну полуоткрытых соединений tcp.

Смежные вопросы