06,python实现小程序ping。

# ping的原理是发送一个ICMP请求包,然后根据目的地址的应答包来判断是否能够和这个主机进行通信。# 我们使用python实现,借助于scapy来进行编写程序。# 导入scapy包。from scapy.all import *import time,struct,random# 编写ping一个包的函数。def ping_one(dst = '36.152.44.95',ttl_no = 64,id_no = 345,seq_no = 5):    start_time = time.time()    # 将时间转换为二进制序列。    time_to_bytes = struct.pack('>d',start_time)    # 进行发送ICMP包,发送出去一个,收回来一个。    ping_one_result = sr1(IP(dst = dst,ttl = ttl_no)/ICMP(seq = seq_no,id = id_no)/time_to_bytes, timeout = 1, verbose=False)    # print(ping_one_result.show())    # 判断收回来的包是不是ICMP的应答包,和序列号是否相同。    try:        if ping_one_result.getlayer('ICMP').type == 0 and ping_one_result.getlayer('ICMP').seq == seq_no:            # print('进行解析包')            # 提取IP头部中的源IP地址,也就是我们ping的IP地址。            reply_src_IP = ping_one_result.getlayer('IP').src            # 提取序列号。            reply_icmp_seq = ping_one_result.getlayer('ICMP').seq            # 提取ttl            reply_icmp_ttl = ping_one_result.getlayer('IP').ttl            # 数据长度等于 数据长度(Raw) + 垫片长度(Padding) + 8字节(ICMP头部长度)            if ping_one_result.getlayer(Raw) != None:                Raw_length = len(ping_one_result.getlayer(Raw).load)            else:                Raw_length = 0            if ping_one_result.getlayer(Padding) != None:                Padding_length = len(ping_one_result.getlayer(Padding).load)            else:                Padding_length = 0            # 计算数据长度。            reply_data_length = Raw_length + Padding_length + 8            # 取出数据部分,这里的数据部分是我们发送ICMP请求包的时候填入的时间。            reply_data = ping_one_result.getlayer(Raw).load            # 定义我们收包的时间。            end_time = time.time()            # 将数据时间部分进行转换。            reply_data_time = struct.unpack('>d',reply_data)            # 然后打印出转换后的类型。            # print(type(reply_data_time))            # print(reply_data_time)            time_to_pass_ms = (end_time - reply_data_time[0]) * 1000            # (接收时间 - 发送时间) * 1000为毫秒数为消耗时间的毫秒数            # print(time_to_pass_ms)            return reply_data_length,reply_src_IP,reply_icmp_seq,reply_icmp_ttl,time_to_pass_ms    except Exception as e:        # 打印出错误。        # print('e', e)        # 匹配错误是否为NoneType类型。        if re.match('.*NoneType.*', str(e)):            print('错误了')            # 如果没有回应,就返回None            return Nonedef ping(dst = '36.152.44.95'):    # 这里其实可以取进程号的,但是我们用随机生成一个数字模拟一下。    id_no = random.randint(0,65535)    # print(id_no)    # 然后进行发送5个数据包。    for i in range(1,6):        # 调用ping一个包函数,入参为目的需要ping的IP地址。ttl,id,和序列号。seq。        ping_result = ping_one(dst,64,id_no,i)        if ping_result != None:            print('%d bytes from %s: icmp_seq=%d ttl=%d time=%4.2f ms' % (ping_result[0], ping_result[1], ping_result[2], ping_result[3], ping_result[4]))        else:            print('.',end = '',flush = True)        # 这里我们暂停一秒。        time.sleep(1)

if __name__ == "__main__":    ping('36.152.44.95')

但现在为止,我们的ping小程序就用python实现了,接下来就可以用wireshark工具抓包来看一下,进行ping百度的地址。
(0)

相关推荐

  • zerotier简明教程

    最近使用zerotier替换了frp来实现内网穿透,zerotier是一个软交换机,使用zerotier可以让多台内网机器组成一个局域网. 首先要安装 zerotier-one 这个软件包,如果是Ar ...

  • 07python实现traceroute程序

    # 这个脚本是实现Linux中traceroute程序的,是探测从我们这个机器到我们要探测的IP地址中间都需要经过那些路由.# 原理:我们的机器发送UDP高端口的数据包,发送给目的地址,首先设置ttl ...

  • 网络实验:IP地址配置

    为主机配置 IP 地址并调通网络,是开发工程师和网络管理员的必备技能. 本节提供了 4 个典型的实验场景,讲解为 Linux 主机配置 IP 地址的关键步骤.实践是最佳的学习途径,本节实验请务必亲自动 ...

  • 挤公交时也可以学Python的小程序

    我知道,咱们的读者里有很多是利用业余时间学习 Python. 我也知道,业余时间学新技能,有多难: 没时间.白天要上班.上学,晚上要加班.写作业.带娃--有点空闲时间只想休息一下,要打开电脑打开教程打 ...

  • appium+python自动化56-微信小程序自动化

    前言 运行环境: android 7.0 appium v1.7.1 webview进程 1.小程序和微信公众号还不太一样,基本思路差不多,先配置:chromeOptions 'chromeOptio ...

  • 还你系统空间的 Python 小程序

    Windows 系统用久了,磁盘中就会产生大量的"垃圾"文件.这些文件有的是程序使用过的临时文件,有的是操作记录和日志信息等.因为往往不能被有效地清理干净,越积越多,导致用户的可用 ...

  • 源码精灵游戏小程序,python入门游戏,点开既玩

    沐沐带你发现好游戏! 丑姐儿今天给大家伙儿介绍一款小游戏, 名字叫做源码精灵, 看着应该是一款商业化的小游戏, 不过也是良心制作的了, 很Q萌. 这一款和头脑风暴有一点点儿类似的地方就是答题, 是的莫 ...

  • 超详细,手把手教你用20行Python代码制作飞花令小程序!

    来源:早起Python 作者:刘早起 飞花令是古时候人们经常玩一种"行酒令"的游戏,是中国古代酒令之一,属雅令."飞花"一词则出自唐代诗人韩翃<寒食> ...

  • 文件夹太乱?Python小程序瞬间帮你整理到位

    作者:小小明.黄同学 来源:数据分析与统计学之美 我承认我不是一个爱整理桌面的人,因为我觉得乱糟糟的桌面,反而容易找到文件. 哈哈,可是最近桌面实在是太乱了,自己都看不下去了,几乎占满了整个屏幕.虽然 ...

  • 用 Python 开发一个微信留言小程序

    在公众号后台,时不时就有朋友吐槽我:"帅b,为什么要关闭公众号的留言功能?" 说出来你可能不信,我是真的没有这个功能,话说在 2018 年 3 月 12 号之后注册的公众号就暂时没 ...

  • 聊聊 Python 做微信小程序自动化,那些踩过的坑?

    聊聊 Python 做微信小程序自动化,那些踩过的坑?

  • 网付课堂:开发一套智慧经营小程序究竟需要多少钱?

    小程序我们大家都不算陌生. 很早之前,小程序因为不像app一样需要下载,是一款无需安装.下载,随开随用的软件,不占用手机内存,所以它的出现曾经一度很受商家与消费者的青睐. 而通过这几年的发展,小程序的 ...