• Python和命令行脚本嗅探物联网络及短中远程无线电


    要点

    1. 设置Python和Kali Linux渗透测试环境
    2. Python套接字网络访问示例:TCP 客户端/服务器,UDP客户端,使用Python库创建类似读写网络工具,在终端测试此工具。构建TCP代理,修改数据包内容、执行模糊测试任务、测试身份验证等。使用上述工具,命令行脚本测试FTP服务器。Paramiko(Python)创建加密SSH2协议,使用SSH服务器和客户端测试。Paramiko(Python)创建SSH 隧道,在Windows系统和Kali SSH服务器间测试。
    3. 通过套接字输入输出控制,创建 Python原始套接字嗅探器,测试Window和Linux系统报文,使用Python基础模块创建报文解析类:解码IP包和 ICMP包。
    4. Python基础模块和网络包处理工具Scapy嗅探器:创建伯克利数据包过滤器,测试邮箱账户安全。创建地址解析协议中毒类,从Kali虚拟机测试网络上设备安全性。借助Python和OpenCV挖掘HTTP流量负载的图像数据,在Kali虚拟机中测试流量图像检测。
    5. Python库和包对网络app,URL地址及其目标渗透测试:下载开源网络应用,在本地部署Python和命令行脚本测试。
    6. 使用应用测试软件Burp Suit API和Python测试网络应用:设置Kali Linux 上Java版Python-Jpython,创建HTTP负载模糊器功能,Python 调用 Java 创建模糊器扩展功能,在浏览器中测试此功能。从网络内容生成密码词表。
    7. Python加密解密数据防渗透:创建加密解密功能函数,测试邮件渗透安全性,文件渗透安全性以及网络服务器渗透安全性。
    8. Python和Windows 管理工具(WMI)漏洞检测:创建漏洞检测服务,创建进程监测,提升Windows 令牌权限,创建文件漏洞:自动注入恶意代码衍生权限提升,测试漏洞检测。
    9. Python物联网网络和短程无线电测试:使用Kali Linux 网络映射探针测试MQTT,开发Lua Wireshark协议解析器分析 C-ECHO请求。测试UPnP 网络协议集。测试短程无线电:RFID 系统,测试欺骗低功耗蓝牙设备。测试中程无线电:通过WiFi抓取凭证。测试远程无线电:利用抓取的LoRa流量

    无线电Python控制设备示例

    LoRa

    LoRa使用低功耗无线电通信,使用三种频率传输数据:433 MHz、868 MHz 和 915 MHz。 您应该使用哪个频率最终取决于您所在的国家(有时甚至是地区)。 我将使用 915 MHz 无线电,与使用 433 MHz 相比,没有额外的限制。

    在测试过程中,我能够使用基本天线实现 215 米的范围,使用更先进的天线,您可以获得更大的范围 - 最终取决于您的环境。 如果天线之间有视线,则覆盖范围会更大。

    射频

    射频每天都在我们身边 — WiFi、无线鼠标/键盘、蓝牙、GPS 等等。 然而,根据应用(和所需的吞吐量),它们都以不同的频率运行。 LoRa 使用较低 UHF 频率的好处是,与 WiFi 或蓝牙相比,即使使用基本天线,我们也能获得相当好的覆盖范围。 然而,这样做的缺点是我们每个数据包可以发送的数据量非常有限。

    由于 LoRa 不是直接通信协议,因此我们发送的任何数据都可以被范围内的其他无线电看到。 没有办法只将数据发送到特定的侦听器(除非您使用 LoRaWAN),因此我们在构建解决方案时,必须牢记这一点。 解决此问题的一种方法是对我们发送的数据进行加密,这样只有那些拥有加密密钥的人才能破译我们发送的内容,例如:

    Encrypted: 240e805f37511b9ea82911de60775c623024a2730125f12805500b94
    Decrypted: {"channel": 1, "message": "..."}
    
    • 1
    • 2

    然而,并非所有微控制器都支持加密。 就我而言,却成为一个限制因素,因而从工作流程中删除了加密。 但这是我认为这是一种有趣的方法,并且保证没有第三方窥探。

    LoRaWAN

    LoRaWAN 是 LoRa 之上的网络协议。 节点连接到网关,网关充当桥梁,允许节点从整个网络发送/接收数据包,而不是仅在范围内发送/接收数据包。 如果您正在围绕 LoRa 构建整个智能家居或想要整合多个设备,那么使用 LoRaWAN 是正确的选择。 由于我想要的项目仅使用两个节点,因此我可以只使用 LoRa。

    Python控制设备示例

    为了打开仓库房门,我将连接到其中一根 RFM95射频模块。 对于我的仓库房门系统,我有一个硬连线按钮,可以按下它来打开。

    在电源中继板的背面,我们可以焊接一个跳线垫,将信号线连接到模块上的特定引脚。然后我们要做的就是将该引脚的输出设置为高电平,以触发电源中继:

    import board
    import digitalio
    import time
    
    relay = digitalio.DigitalInOut(board.A0)
    relay.direction = digitalio.Direction.OUTPUT
    relay.value = True
    time.sleep(0.1)
    relay.value = False
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    为了跟踪货车的位置,我为另一台配备了 GPS模块。 它将通过 UART 与射频模块进行通信,并允许我们查看货车的位置、速度、高度以及更多信息(如果需要)。使此 GPS 模块使我们能够通过几个简短的命令轻松获取坐标。

    我们可以像这样获取我们的位置:

    import gps
    import board
    import busio
    import time
    
    uart = busio.UART(board.TX, board.RX, baudrate=9600, timeout=10)
    gps = gps.GPS(uart, debug=False)
    
    gps.send_command(b"PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0")
    gps.send_command(b"PMTK220,1000")
    
    last_print = time.monotonic()
    while True:
      current = time.monotonic()
      gps.update()
    
      if current - last_print >= 1.0:
          last_print = current
          if not gps.has_fix:
              print("Waiting for GPS location fix...")
              continue
    
          print(f"GPS Location: {gps.latitude}, {gps.longitude}")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    为了检查我们是否应该打开仓库门,货车的射频模块将使用 GPS 模块每秒获取其活动位置。 然后,它使用半正弦公式计算从其位置到触发区域的距离。 如果距离在 15 米以内,它会发出“开门”消息。 为了防止在我们离开社区时触发此消息,我们首先必须保持至少 200 米的距离才能“激活”触发区域。

    发送指令

    我的所有消息都包含以下字段:

    字段描述
    ID消息的伪随机唯一标识符
    通道通道消息
    消息指令ID
    目标此消息是回复的目标消息 ID

    每当发送消息时,我们都会使用Python的struct库将数据打包成二进制数据。这使有效负载大小保持最小,同时仍然为我们提供了一种稍后解码消息的简单方法:

    import struct
    
    # Set the message format as four unsigned shorts
    msg_format = '4H'
    
    # Pack our example variables according to the format
    packed = struct.pack(msg_format, 202, 20, 4, 429) 
    
    print(packed)
    # b'\xca\x00\x14\x00\x04\x00\xad\x01'
    
    # Unpack the data
    msg_id, channel, message, target = struct.unpack(msg_format, packed)
    
    print(msg_id, channel, message, target)
    # 202 20 4 429
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    该项目总共有四个命令:

    指令描述
    ACK收到消息的确认
    Ping向所有通道侦听器发送 ping
    Pong回复ping消息
    Trigger打开仓库门

    每当收到消息时,都会发送一条确认消息以确认收到。 如果五秒内没有收到确认,它将自动重新发送消息,直到收到确认为止。

    参阅一:计算思维
    参阅二:亚图跨际
  • 相关阅读:
    uni-app 经验分享,从入门到离职(实战篇)——模拟从后台获取图片路径数据后授权相册以及保存图片到本地(手机相册)
    如何重新训练模型?
    Java学习——泛型通配符
    2022新版PMP考试有哪些变化?
    Practical Knowledge: Introduction of X METAVERSE PRO Social Follow-up Mode
    算法训练day37|贪心算法 part06(LeetCode738.单调递增的数字)
    读书笔记|指数型函数对算法的影响实际应用-day3
    【二叉树】——链式结构(快速掌握递归与刷题技巧)
    OpenCV每日函数 结构分析和形状描述符(8) fitLine函数 拟合直线
    nginx升级
  • 原文地址:https://blog.csdn.net/jiyotin/article/details/136750771