基于pyqt5+scapy 根据ip 具体端口 进行扫描 的程序

先给出代码

python 复制代码
import sys

from PyQt5 import uic
from PyQt5.QtWidgets import *


from scapy.all import *
import argparse
import logging
from scapy.layers.inet import IP, TCP
from scapy.sendrecv import sr1



class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()
    def init_ui(self):
        self.ui=uic.loadUi("./spec_port_scan.ui")
        self.ip=self.ui.lineEdit
        self.port=self.ui.lineEdit_2
        self.textBrowser=self.ui.textBrowser
        start=self.ui.pushButton

        start.clicked.connect(self.begin)

    def tcpScan(self,a,b):
        # S 代表发送SYN报文
        print("SSSSSSS")



    def begin(self):
        self.ipp=self.ip.text()
        self.portt=self.port.text().split(' ')
        print(self.ipp,self.portt)

        for p in self.portt:
            port = int(p)
            print(type(port))

            self.target = self.ipp

            send = sr1(IP(dst=self.target) / TCP(dport=port, flags="S"), timeout=2, verbose=0)

            if (send is None):
                self.textBrowser.append("ERROR")
                self.textBrowser.repaint()
                continue
            # 如果是TCP数据包
            elif send.haslayer("TCP"):
                # 是否是 SYN+ACK 应答
                if send["TCP"].flags == "SA":
                    # 发送ACK+RST数据包完成三次握手
                    # send_1 = sr1(IP(dst=target) / TCP(dport=port, flags="AR"), timeout=2, verbose=0)
                    self.textBrowser.append( "[+] 扫描主机: %-13s 端口: %-5s 开放" % (self.target, port))
                    self.textBrowser.repaint()
                elif send["TCP"].flags == "RA":
                    self.textBrowser.append("[+] 扫描主机: %-13s 端口: %-5s 关闭" % (self.target, port))
                    self.textBrowser.repaint()


        #self.textBrowser.repaint()
        #print(self.a)





if __name__=='__main__':
    app=QApplication(sys.argv)
    w=MyWindow()
    w.ui.show()

    app.exec()

实现做好ui 界面 后与python相连接

导入 相应的扫描程序 下面给出:有点缝合怪的感觉

python 复制代码
from scapy.all import *
import argparse
import logging
from scapy.layers.inet import IP, TCP
from scapy.sendrecv import sr1

def tcpScan(target,ports):
    for port in ports:
        # S 代表发送SYN报文
        send=sr1(IP(dst=target)/TCP(dport=port,flags="S"),timeout=2,verbose=0)
        if (send is None):
            continue
        # 如果是TCP数据包
        elif send.haslayer("TCP"):
            # 是否是 SYN+ACK 应答
            if send["TCP"].flags == "SA":
                # 发送ACK+RST数据包完成三次握手
                send_1 = sr1(IP(dst=target) / TCP(dport=port, flags="AR"), timeout=2, verbose=0)
                print("[+] 扫描主机: %-13s 端口: %-5s 开放" %(target,port))
            elif send["TCP"].flags == "RA":
                print("[+] 扫描主机: %-13s 端口: %-5s 关闭" %(target,port))

if __name__ == "__main__":
    logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
    # 使用方式: main.py -H 192.168.1.10 -p 80,8080,443,445
    parser = argparse.ArgumentParser()
    parser.add_argument("-H","--host",dest="host",help="输入一个被攻击主机IP地址")
    parser.add_argument("-p","--port",dest="port",help="输入端口列表 [80,443,135]")
    args = parser.parse_args()
    if args.host and args.port:
        tcpScan(args.host,eval(args.port))
    else:
        parser.print_help()
相关推荐
林开落L2 小时前
从零开始学习Protobuf(C++实战版)
开发语言·c++·学习·protobuffer·结构化数据序列化机制
牛奔2 小时前
Go 是如何做抢占式调度的?
开发语言·后端·golang
符哥20082 小时前
C++ 进阶知识点整理
java·开发语言·jvm
小猪咪piggy2 小时前
【Python】(4) 列表和元组
开发语言·python
難釋懷3 小时前
Lua脚本解决多条命令原子性问题
开发语言·lua
CoderCodingNo3 小时前
【GESP】C++ 二级真题解析,[2025年12月]第一题环保能量球
开发语言·c++·算法
独好紫罗兰3 小时前
对python的再认识-基于数据结构进行-a005-元组-CRUD
开发语言·数据结构·python
LYOBOYI1233 小时前
qtcpSocket详解
c++·qt
chilavert3183 小时前
技术演进中的开发沉思-356:重排序(中)
java·开发语言
devmoon3 小时前
为 Pallet 搭建最小化 Mock Runtime 并编写单元测试环境
开发语言·单元测试·区块链·智能合约·polkadot