Linux下tcp端口SYN扫描器,Linux-Python-Scapy的TCP扫描

TCP 连接扫描:

客户端与服务器建立 TCP 连接要进行一次三次握手,如果进行了一次成功的三次握手,则说明端口开放;

TCP SYN 扫描(也称为半开放扫描或stealth扫描):

这个技术同 TCP 连接扫描非常相似。同样是客户端向服务器发送一个带有 SYN 标识和端口号的数据包,如果目标端口开发,则会返回带有 SYN 和 ACK 标识的 TCP 数据包;

TCP 圣诞树(Xmas Tree)扫描:

在圣诞树扫描中,客户端会向服务器发送带有 PSH,FIN,URG 标识和端口号的数据包给服务器。如果目标端口是开放的,那么不会有任何来自服务器的回应。如果服务器返回了一个带有 RST 标识的 TCP 数据包,那么说明端口处于关闭状态

TCP FIN 扫描:

FIN 扫描会向服务器发送带有 FIN 标识和端口号的 TCP 数据包。如果没有服务器端回应则说明端口开放。如果服务器返回一个 RST 数据包,则说明目标端口是关闭的。

TCP 空扫描(Null):

在空扫描中,客户端发出的 TCP 数据包仅仅只会包含端口号而不会有其他任何的标识信息。如果目标端口是开放的则不会回复任何信息。如果服务器返回了一个 RST 数据包,则说明目标端口是关闭的。

TCP ACK 扫描:ACK 扫描不是用于发现端口开启或关闭状态的,而是用于发现服务器上是否存在有状态防火墙的。它的结果只能说明端口是否被过滤。再次强调,ACK 扫描不能发现端口是否处于开启或关闭状态。客户端会发送一个带有 ACK 标识和端口号的数据包给服务器。如果服务器返回一个带有 RST 标识的 TCP 数据包,则说明端口没有被过滤,不存在状态防火墙。如果目标服务器没有任何回应或者返回ICMP 错误类型3且代码为1,2,3,9,10或13的数据包,则说明端口被过滤且存在状态防火墙。

TCP 窗口扫描:

TCP 窗口扫描的流程同 ACK 扫描类似,同样是客户端向服务器发送一个带有 ACK 标识和端口号的 TCP 数据包,但是这种扫描能够用于发现目标服务器端口的状态。在 ACK 扫描中返回 RST 表明没有被过滤,但在窗口扫描中,当收到返回的 RST 数据包后,它会检查窗口大小的值。如果窗口大小的值是个非零值,则说明目标端口是开放的。

一、SYN扫描:>> i=IP()

>> t=TCP()

>> i.dst='10.202.32.0/24'/连续地址段

>> t.sport=8888

>> t.dport=[3389,80,21,22,23,443,445,137,138,139]/(1,1024)

[]表示多个端口,()表示连续端口

>> repose=(i/t)

>> repose=(i/t)

>> t.flags='S'/产生标志位也可以写数据例如ACK写16

从下到上FIN—SYN—RST—PSH—ACK—URG

1     2    4   8    16   32>> ans,unans=sr(respose)

> ans.show()

0000 IP / TCP 192.168.80.250:8888 > 10.202.32.1:ssh S ==> IP / TCP 10.202.32.1:ssh > 192.168.80.250:8888 SA / Padding

0001 IP / TCP 192.168.80.250:8888 > 10.202.32.74:microsoft_ds S ==> IP / TCP 10.202.32.74:microsoft_ds > 192.168.80.250:8888 SA / Padding

0002 IP / TCP 192.168.80.250:8888 > 10.202.32.74:netbios_ns S ==> IP / TCP 10.202.32.74:netbios_ns > 192.168.80.250:8888 RA / Padding

0003 IP / TCP 192.168.80.250:8888 > 10.202.32.74:netbios_ssn S ==> IP / TCP 10.202.32.74:netbios_ssn > 192.168.80.250:8888 SA / Padding

对数据进行监控:

>> sniff(iface="eth0",prn=lambda x:x.show() )

对数据进行查看处理:

ans.summary( lambda(s,r): r.sprintf("%IP.src% \t %TCP.sport% \t %TCP.flags%") )

10.200.230.1     ssh     SA

10.200.230.11    3389    SA

10.200.230.11    loc_srv     SA

10.200.230.11    microsoft_ds    SA

10.200.230.12    3389    SA

10.200.230.12    https   SA

10.200.230.40    3389    SA

10.200.230.41    3389    SA

10.200.230.42    loc_srv     SA

10.200.230.42    microsoft_ds    SA

10.200.230.50    3389    SA

二、TCP ACK 扫描;

>> i=IP()

>> i.dst='10.200.193.0/24'

>> t=TCP()

>> t.flags='A'

>> t.sport=9999

>> t.dport=[3389,21,22,23,80,443]

>> respose=(i/t)

ans,unans=sr(respose)

>> ans.show()

0000 IP / TCP 192.168.80.250:9999 > 10.200.193.0:3389 A ==> IP / TCP 10.200.193.0:3389 > 192.168.80.250:9999 R / Padding

0001 IP / TCP 192.168.80.250:9999 > 10.200.193.0:ftp A ==> IP / TCP 10.200.193.0:ftp > 192.168.80.250:9999 R / Padding

0002 IP / TCP 192.168.80.250:9999 > 10.200.193.0:ssh A ==> IP / TCP 10.200.193.0:ssh > 192.168.80.250:9999 R / Padding

0003 IP / TCP 192.168.80.250:9999 > 10.200.193.0:telnet A ==> IP / TCP 10.200.193.0:telnet > 192.168.80.250:9999 R / Padding

如果服务器返回一个带有 RST 标识的 TCP 数据包,则说明端口没有被过滤,不存在状态防火墙。

对数据进行监控:

>> sniff(iface="eth0",prn=lambda x:x.show() )

对数据进行查看处理:

ans.summary( lambda(s,r): r.sprintf("%IP.src% \t %TCP.sport% \t %TCP.flags% \t %ICMP.type%") )

10.200.193.1     3389    R   ??

10.200.193.1     ftp     R   ??

10.200.193.1     ssh     R   ??

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值