如何使用方法(TCP SYN)创建端口扫描程序TCP SYN?

Pau*_*oso -1 python python-3.x

#####################################
# 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")
Run Code Online (Sandbox Code Playgroud)

上面的python脚本是TCP扫描.如何将其更改为TCP SYN扫描?如何使用方法(TCP SYN)创建端口扫描程序TCP SYN?

ffe*_*ast 6

正如@Upsampled所提到的,您可以使用原始套接字(https://en.wikipedia.org/),因为您只需要TCP协议的子集(发送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与- Scapy的和-蟒-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
Run Code Online (Sandbox Code Playgroud)


Lia*_*lly 5

首先,您必须使用 RAW 套接字生成自己的 SYN 数据包。你可以在这里找到一个例子

其次,您需要侦听来自扫描主机的 SYN-ACK,以确定哪些端口实际尝试启动 TCP 握手(SYN、SYN-ACK、ACK)。您应该能够检测和解析来自响应应用程序的 TCP 标头。从该标头中,您可以确定源端口,从而确定存在侦听应用程序。

此外,如果您实现了这一点,您基本上也制作了一个 SYN DDOS 实用程序,因为您将创建大量半开的 tcp 连接。