• 我的python渗透测试工具之主机嗅探


      嗅探工具的主要目标是基于UDP发现目标网络中的存活主机,选择UDP的原因是UDP访问过程开销小。

      由于很多的操作系统在处理UDP端口的闭合时都会存在一个共性,我们也正是利用这个共性来开展确定此IP上是否有存活主机。

      当我们发送一个数据包给主机上的一个以关闭的UDP接口时,如果此接口返回一个ICMP的话,就表示目标主机存活,如果无返回,说明目标主机不存在 。

      

    #coding = utf-8
    import os
    import socket
    
    #目标主机,视情况而定
    host = "192.168.1.1   ""
    
    #创建原始套接字,然后绑定在公开接口上
    if os.name == "nt":
            socket_protocol = socket.IPPROTO_IP
    else:
            socket_protocol = socket.IPPROTO_ICMP
    
    sniffer = socket.socket(socket.AF_INET,socket.SOCK_RAW,socket_protocol)
    sniffer.bind((host,0))
    
    #设置在捕获的I数据包中包含IP头
    sniffer.setsockopt(socket.IPPROTO_IP,socket.IP_HDRINCL,1)
    
    #在windos平台上,需要设置IOCTL以启用会混杂模式
    if os.name == "nt":
            sniffer.ioctl(socket.SIO_RCVALL,socket.RCVALL_ON)
            
    #读取单个数据包
    print(sniffer.recvfrom(65565))
    
    #然后关闭混杂模式
    if os.name == "nt":
            sniffer.ioctl(socket.SIO_RCVALL,socket.RCVALL_OFF)

    IOCTL(输入/输出控制):是用户隔离模式下与内核模式下组件进行通信的方式的组件进行通信的方式.

    混杂模式:是指一台机器能够接收所有经过它的数据流,而不论其目的地址是否是他。可供管理员进行网络诊断,在这里我们利用其特性.

  • 相关阅读:
    迭代器在LinkedList上的删除
    java多线程:CopyOnWriteArrayList
    vs中代码编译通过,但还是有红色波浪线
    vs中项目属性配置
    TortoiseGit安装与配置
    DC(device context)
    weak_ptr 使用
    C++ 中shared_ptr循环引用计数问题
    for_each与lambda表达式联合使用
    new 和 make_shared 在内存上的区别
  • 原文地址:https://www.cnblogs.com/cuiyuanzhang/p/9462437.html
Copyright © 2020-2023  润新知