python scapy tcp scan script(tcp 扫描器)

利用python scapy 这个强大的类库写了个tcp 端口扫描器

原理

向指定端口发送tcp包flags=‘S’,如果该端口开放则回复tcp包 flags=‘SA’;
yes,就这么简单,当然如果有firewall那另当别论了

流程

1.定义数据包捕捉器并送入子线程运行
2.运行发包函数
ps:这种多个端口扫描的脚本如果用sr或srp一个个的发和收,是非常慢的。
建议向我学习定义一个捕捉器子线程运行,将会非常高效的

code[name: tcp_scan.py]

import sys
from scapy.all import *
from threading import Thread

def scan_Fun(args):      //构造tcp数据包flags至"s"标志位并发送
    ip,ports = args
    pkt = IP(dst=ip)/TCP(dport=ports,flags="S")
    send(pkt,verbose=False)
    #print(a.show())


def port_active():			//捕捉数据包并进行条件匹配
    def print_liver(pkt):
        if TCP in pkt and pkt[TCP].flags == 'SA':		
            retstring = '%IP.src%: '+str(pkt[TCP].sport)+'[%TCP.sport%] is open'
            return pkt.sprintf(retstring)

    sniff(filter='tcp',timeout=3,prn=print_liver)		//定义一个捕捉器,捕捉TCP包并调用回调函数进行处理

def main():			
    args = sys.argv			//接收两个参数,如参数不足则输出提示,并退出
    if len(args) != 3:
        print('Usage: python tcp_scan.py ip start_port,end_port')
        print('for example: python tcp_scan.py 192.168.199.3 21,80')
        exit()

    start_port,end_port = args[2].split(',')
    Thread(target=port_active).start()		//定义一个子线程并运行
    scan_Fun([args[1],(int(start_port),int(end_port))])		//传参并运行发包函数

if __name__ == '__main__':
    main()

如何运行

[root@local]#python tcp_scan.py 192.168.199.3 21,80

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

键盘侠伍十七

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值