基于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()
相关推荐
weixin_531094691 分钟前
heap_4内存管理
java·开发语言·算法
疯狂的维修7 分钟前
关于用C#写电机起保停控制
开发语言·c#
geovindu1 小时前
rust: Abstract Factory pattern
开发语言·后端·设计模式·rust·抽象工厂模式
“AI国潮设计-小江”1 小时前
《Python+SDXL实战:用ControlNet批量生成“英歌舞麻将糕”IP,附自动化脚本与商用思路》
开发语言·人工智能·python·prompt·aigc
Cc.Y2 小时前
Java零基础入门:封装与继承 —— 从“裸奔“到“穿衣服“,从“重复造轮子“到“站在巨人肩膀上“
java·开发语言
Escalating_xu2 小时前
【C 语言】深入理解指针(4):回调函数、qsort、void * 与泛型排序的模拟实现
java·c语言·开发语言
吠品2 小时前
GitHub 周榜拆解:决策小模型扎堆上位
c语言·开发语言·算法
见叶之秋3 小时前
C++ 泛型世界的两块拼图:容器适配器与仿函数
java·开发语言
逗脑IDE3 小时前
零基础学ESP32:RFID无线射频卡——让ESP32拥有“刷卡“能力!
开发语言·网络·人工智能·python·esp32·硬件开发
小师兄吃牛肉3 小时前
C语言篇:内联函数
c语言·开发语言