udp协议扫描

  • 发现原理

    向目标主机发送一个,没有开放的端口发送数据,目标主机会返回一个ICMP
    目标端口不可达的消息,通过该特征可以对主机进行判断是否在线
    
  • 注意事项

       如果目标主机端口不在线,或者在线且目标端口为开放状态,那么发送出去的UDP数据包不会收到任何回复
    
  • 判断条件

       以返回包中的ip部分proto参数的值作为判断条件,确定目标主机是否返回ICMP消息,原理是ip包头中的protocol部分用于标记上层协议类型,如果数值为0x01的话表示ICMP
    

代码部分

  • 数据包构造扫描部分

    • 通过python发包神器scapy构造UDP数据包
      
    • 端口一定要选择没有开放的,不然会扫描不到主机
      
def scan(ip):try:                    # 端口要求一定是没开放packet = IP(dst=ip)/UDP(dport=56789)result = sr1(packet,timeout=0.5,verbose=0)#result.show()if int(result[IP].proto) == 0x01: # 0x01 代表的ICMP字段值time.sleep(0.1)print(ip + ' ' + "on line")except:return
  • 参数获取部分

    • 通过optparse模块接收用户提供的参数,判断是扫描整个网段还是读取ip地址文件
      
    • 获取到地址后再通过Thread多线程去发送数据包
      

def main():# 生成帮助信息,以及接收用户输入的参数,并建立对象usage = "Usage: arp扫描.py -f <filename> -i <ip address>"parse = OptionParser(usage=usage)parse.add_option("-f", "--file", type="string", dest="filename", help="specify the IP address file")parse.add_option("-i", '--ip', type="string", dest="address", help="specify the IP address")(option, args) = parse.parse_args()filename = option.filenameaddress = option.address# 判断是不是地址文件if filename:if not os.path.exists(filename):   #判断文件是否存在print("The file does not exist. Please enter it again")sys.exit()    with open(filename, "r") as f:    #读取文件for i in f.readlines():ip = i.strip()t = Thread(target=scan, args=(ip,))t.start()# 判断是不是整个网段if address:prefix = address.split(".")[0] + '.' + address.split(".")[1] + '.' + address.split(".")[2] + "."  # 将用户输入的地址以.作为分隔符for i in range(0, 255):    ip = prefix + str(i)  #构造扫描整个网段所需ipt = Thread(target=scan, args=(ip,))t.start()

整体代码

import os
import time
from optparse import OptionParser
from scapy.all import *def scan(ip):try:packet = IP(dst=ip)/UDP(dport=56789)result = sr1(packet,timeout=0.5,verbose=0)#result.show()if int(result[IP].proto) == 0x01: # 0x01 代表的ICMP字段值time.sleep(0.1)print(ip + ' ' + "on line")except:returndef main():# 生成帮助信息,以及接收用户输入的参数,并建立对象usage = "Usage: arp扫描.py -f <filename> -i <ip address>"parse = OptionParser(usage=usage)parse.add_option("-f", "--file", type="string", dest="filename", help="specify the IP address file")parse.add_option("-i", '--ip', type="string", dest="address", help="specify the IP address")(option, args) = parse.parse_args()filename = option.filenameaddress = option.address# 判断是不是地址文件if filename:if not os.path.exists(filename):   #判断文件是否存在print("The file does not exist. Please enter it again")sys.exit()with open(filename, "r") as f:        #读取文件for i in f.readlines():ip = i.strip()t = Thread(target=scan, args=(ip,))t.start()# 判断是不是整个网段if address:prefix = address.split(".")[0] + '.' + address.split(".")[1] + '.' + address.split(".")[2] + "."  # 将用户输入的地址以.作为分隔符for i in range(0, 255):    ip = prefix + str(i)  #构造扫描整个网段所需ipt = Thread(target=scan, args=(ip,))t.start()if __name__ == '__main__':main()

运行效果

扫描器篇(五)之scapy构造UDP数据包完成主机发现相关推荐

  1. 判断端口是否能用_扫描器篇(八)之python+scapy构造TCP协议包扫描主机端口

    TCP协议端口扫描 要使用TCP协议去完成端口扫描,肯定是需要了解TCP协议通信过程和原理才能完成的 TCP协议的特点 1 面向连接的:使用TCP协议通信的双方必须先建立连接,然后才能开始数据的读写, ...

  2. 如何在Linux命令行下发送和接收UDP数据包

    众所周知,在传输层有两个常用的协议 TCP 和 UDP,本文介绍在 Linux 命令行下,如何使用 nc 命令发送或接收 UDP 数据包,这些命令的用法对调试 UDP 通信程序将有所帮助. 1. 问题 ...

  3. 【KALI使用】17 主动信息收集——四层发现(TCP、UDP、使用 scapy 定刢数据包迕行高级扫描)

    目录 四层发现优缺点 TCP发现 使用 scapy 定刢数据包迕行高级扫描--发送3.4层组合包头 长组合语句 python脚本 UDP 脚本 总结: 只是记录 学习笔记 参考:这个 四层发现优缺点 ...

  4. 【Socket网络编程】7.以太网数据包、IP数据包、UDP数据包

    以太网数据包.ip数据包.udp数据包 搭配这篇博文服用,效果更好:数据封装 和 数据拆封:https://blog.csdn.net/u011754972/article/details/11794 ...

  5. Linux内核网络协议栈:udp数据包发送(源码解读)

    <监视和调整Linux网络协议栈:接收数据> <监控和调整Linux网络协议栈的图解指南:接收数据> <Linux网络 - 数据包的接收过程> <Linux网 ...

  6. linux 内核 发送数据,使用Linux内核模块发送的UDP数据包不使用套...

    您不需要套接字就可以在内核中发送UDP数据包,只需分配一个skb,自己构造IP报头和UDP报头,最后通过dev_queue_xmit()将其发送出去. skb = alloc_skb(len, GFP ...

  7. 教你动手写UDP协议栈 - UDP数据包解析<1>

    前景 为啥要自己写一个mini UDP的协议栈?因为我们干偷偷摸摸的事情,哈哈哈!!! 其实是为了不跑一个庞大的LWIP协议栈,通过自己写的mini udp协议栈截取数据包给设备升级.这样节省了很多资 ...

  8. linux内核丢弃udp报文,c++ Linux UDP数据包丢失的原因

    我有一个 Linux C应用程序接收有序的UDP数据包.由于排序,我可以很容易地确定数据包何时丢失或重新排序,即当遇到"间隙"时.该系统具有处理差距的恢复机制,但最好避免出现差距. ...

  9. 以太网,IP,TCP,UDP数据包分析【转】

    原文地址:http://www.cnblogs.com/feitian629/archive/2012/11/16/2774065.html 1.ISO开放系统有以下几层: 7 应用层 6 表示层 5 ...

  10. qt定时连续发送udp数据包_TCP和UDP

    首先强调一点,TCP/IP协议是一个协议簇.里面包括很多协议的,UDP只是其中的一个, 之所以命名为TCP/IP协议,因为TCP.IP协议是两个很重要的协议,就用他两命名了. 两个协议的区别实际使用时 ...

最新文章

  1. Linux修改密码是提示“passwd: 鉴定令牌操作错误”问题的处理办法
  2. 不懂技术的人请不要对懂技术的人说这很容易
  3. Truncate a string
  4. 交换机背板带宽公式计算
  5. linux php curl 安装包下载,linux中php如何安装CURL扩展方法
  6. c# 多态实现_虚方法
  7. OpenCV笔记(Size)
  8. JSP中四种传递参数的方法
  9. “京东小贷” 注册资本由30亿元增至50亿元,恭喜
  10. Struts2请求处理的内部流程说明(版本二)
  11. java里上下文对象,java-在百里香模板中的Web上下文对象上发出...
  12. 【幽默】工作搞不好的原因
  13. mysql字符串区分大小写的问题
  14. mysql中如何创建数据库_Mysql 中如何创建数据库和数据表
  15. cmd 获取ftp没反应_python笔记13-执行cmd指令
  16. 最短路径算法之四——SPFA算法
  17. 光伏蓄电池单相并网模型。光伏+MPPT+boost升压电路+桥式逆变 带参考文件,模型说明文件
  18. excel打不开_卸载WPS以后为什么无法打开一个新建的Excel工作簿了
  19. 新华系“雄文”为何引发游戏产业3000亿市值蒸发?
  20. 跟着实训团初学HTML的第一天

热门文章

  1. 基于java springboot活动报名微信小程序源码(毕设)
  2. 火狐浏览器安装印象笔记剪藏
  3. 软件开发 | 如何写软件开发文档
  4. FileNet小错误汇总
  5. mock server java_mock server搭建及接口测试简单实例
  6. 前端素材库网站集合——网站集合
  7. TI OSAL资料 整理
  8. word课程表设置符号与编号_小学生课程表word模板 小学生使用WORD.doc
  9. cd40系列芯片_CD40系列74系列芯片
  10. .net Remoting