主机存活探测程序

一、ICMP协议原理

  1. 什么是icmp协议

因特网控制报文协议ICMP(Internet Control Message Protocol)是一个差错报告机制,是TCP/IP协议簇中的一个重要子协议,通常被IP层或更高层协议(TCP或UDP)使用,属于网络层协议,主要用于在 IP主机和路由器之间传递控制消息,用于报告主机是否可达、路由是否可用等。这些控制消息虽然并不传输用户数据,但是对于收集各种网络信息、诊断和排除各种网络故障以及用户数据的传递具有至关重要的作用。

2.ICMP工作原理

当数据包处理过程出现差错时,ICMP向数据包的源端设备报告这个差错,它既不会纠正这个差错,也不会通知中间的网络设备。因为ICMP报文被封装在IP数据包内部,作为IP数据包的数据部分通过互联网传递。IP数据包中的字段包含源端和最终的目的端,并没有记录报文在网络传递中的全部路径(除非IP数据包中设置了路由记录选项)。因此当设备检测到差错时,它无法通知中间的网络设备,只能向源端发送差错报告。

3.报文格式

每一个ICMP消息都将包含引发这条ICMP消息的数据包的完全IP包头,ICMP报文则作为IP数据包的数据部分封装在IP数据包内部。ICMP包头中包含的三个固定字段就是源端设备确定发生错误的类型的主要依据。

  • Type字段表示ICMP消息的类型;
  • Code字段表示ICMP消息类型细分的子类型;
  • Checksum字段表示ICMP报文的校验和。

主机存活探测程序

主机存活探测程序

4.实现方法

(1)ping命令

能验证网络的连通性

会统计响应时间和TTL(IP包中的Time To Live,生存周期)

主机存活探测程序

(2)tracert命令

traceroute也是基于ICMP协议实现的。

功能:

打印出可执行程序主机,一直到目标主机之前经历多少路由器。

主机存活探测程序

二、代码实现

from scapy.all import *
from random import randint
from optparse import OptionParser

from scapy.layers.inet import IP, ICMP

def Scan(ip):
    ip_id = randint(1,65535)
    icmp_id = randint(1,65535)
    icmp_seq = randint(1,65535)
    packet = IP(dst=ip,ttl=64,id=ip_id)/ICMP(id=icmp_id,seq=icmp_seq)/b'rootkit'
    result = sr1(packet,timeout=1,verbose=False)
    if result:
        for rcv in result:
            scan_ip = rcv[IP].src
            print(scan_ip+'......''host is up')
    else:
        print(ip + '......''host is down')
def main():
    parser = OptionParser()
    parser.add_option('-i',type='string',dest='IP')# 获取IP地址参数
    options,args = parser.parse_args()
    print("scan for "+options.IP+"\n")
    #判断是单台还是多台主机
    #IP中存在-,则为多台主机
    if '-' in options.IP:
        #循环遍历需要扫描的IP
        for i in range(int(options.IP.split('-')[0].split('.')[3]),int(options.IP.split('-')[1])+1):
            Scan(options.IP.split('.')[0]+'.'+options.IP.split('.')[1]+'.'+options.IP.split('.')[2]+'.'+str(i))
            time.sleep(0.2)
    else:
        Scan(options.IP)
    print("\nfinished\n")

if  __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        print("interrupted by user, killing all threads")

运行结果:

主机存活探测程序

Original: https://www.cnblogs.com/-xiaopeng1/p/16711564.html
Author: 江公
Title: 主机存活探测程序

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/583026/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 使用bt面板中Python项目管理部署Django项目找不到static采坑记

    工作需要,准备在用django做一个小项目,本地测试没有问题,但是使用bt的工具”python项目管理器”部署到服务器上,找不到static文件 于是尝试解…

    Linux 2023年6月14日
    0113
  • Springboot Mybatis 集成 Redis

    添加 Redis 依赖 $xslt</p> <p>org.springframework.boot spring-boot-starter-data-red…

    Linux 2023年5月28日
    090
  • Samba:文件共享

    samba:现主要用于Linux与Windows之间的文件共享。 samba的特点: 用于Linux与Windows之间进行文件共享和打印机共享 不仅用于Windows之间的文件共…

    Linux 2023年6月13日
    0112
  • Redis的快照持久化-RDB与AOF

    Redis为了内部数据的安全考虑,会把本身的数据以文件形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)的里边。 数据保存到硬盘的过程就称为&#822…

    Linux 2023年5月28日
    0100
  • 文件批量改名(有规律)

    1.如你的文件放在桌面名字为file的文件内,我要把这些文件批量名称改为page1.jpg,page2.jpg,page3.jpg………. 2….

    Linux 2023年6月13日
    085
  • Redis6 源码调式

    Redis6 源码调式 安装Cygwin 1、下载安装Cygwin 去Cygwin的官方网站http://www.cygwin.com/ window 64位请选择 setup-x…

    Linux 2023年5月28日
    0124
  • 什么是视频编码?编解码器和压缩技术

    想知道什么是视频编码,为什么它很重要? 在本文中,我们将研究编码、编解码器和压缩技术的过程。这包括什么使得一个推荐的编解码器,虽然是取决于情况。它还涵盖了为什么某些伪影,与压缩有关…

    Linux 2023年6月7日
    0112
  • 二叉树的基本操作(C语言版)

    今天走进数据结构之二叉树 二叉树的基本操作(C 语言版) 1 二叉树的定义 二叉树的图长这样: 二叉树是每个结点最多有两个子树的树结构,常被用于实现二叉查找树和二叉堆。二叉树是链式…

    Linux 2023年6月14日
    0106
  • linux神器sed快速入门,不好用你打我!

    为什么要学习sed sed(Stream EDitor)被誉为Linux三剑客之一,负责过滤和转换文本,功能灵活又强大,搭配正则表达式更是如虎添翼。 如果你需要向1000行文本中的…

    Linux 2023年6月7日
    087
  • Linux使用SNAT实现局域网上网

    1、一台能上网的Linux机器 2、操作步骤 host-10-11 配置snat,开启路由转发 iptables -t nat -A POSTROUTING -s 10.10.10…

    Linux 2023年6月6日
    090
  • Linux命令篇-curl 命令

    curl 查看网页源码 自动跳转 显示头信息 通信过程 下载文件 断点续传 获取天气 curl 查看网页源码 直接在curl命令后加上网址,就可以看到网页源码。 $ curl ww…

    Linux 2023年6月13日
    0110
  • 【持久层框架】- SpringData-JPA

    SpringData – JPA 😄生命不息,写作不止🔥 继续踏上学习之路,学之分享笔记👊 总有一天我也能像各位大佬一样🏆 一个有梦有戏的人 @怒放吧德德🌝分享学习心得…

    Linux 2023年6月6日
    074
  • MariaDB 安装和配置

    一、MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。 1、关闭selinux ①修改selinux的配置文件 [root@localh…

    Linux 2023年6月7日
    097
  • linux自动备份mysql数据库

    备份脚本记录一下–(单个数据库) 2021-11-15 1.新建shell脚本:vim **.sh #!/bin/bashCKUP=/data/backup/db #获…

    Linux 2023年5月27日
    0114
  • jmeter学习记录–04–Beanshell

    一、什么是Bean Shell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;BeanShell是一种松散类型的脚本语言(这点和JS类…

    Linux 2023年5月28日
    0111
  • 部署office在线预览服务器(Office Web Apps Server)

    引言为方便在web端方便的使用office。 简介 Office Online Server (OOS,下文简写为OOS ) 提供基于浏览器的 Word、PowerPoint、Ex…

    Linux 2023年6月14日
    0126
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球