python 通过 http、dns、icmp判断网络状态
- #http使用requests发包bs4解析,dns、icmp 使用scapy发包
import time- import threading
- import requests,bs4
- from scapy.all import *
- from requests.exceptions import ReadTimeout,ConnectTimeout,HTTPError,ConnectionError
- import struct
- def send_http_packet(url):
- requests.packages.urllib3.disable_warnings()
- user_agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"
- headers = {'User-Agent': user_agent}
- url = "http://" + url
- response_html= ""
- try:
- response = requests.get(url, headers)
- response_html = response.content.decode()
- return response_html
- except ReadTimeout:
- print('Read Timeout')
- return None
- except ConnectTimeout:
- print('Connect Timeout')
- return None
- except HTTPError:
- print('HTTP Error')
- return None
- except ConnectionError:
- print('Connection Error')
- return None
- def check_http(html,title):
- if html != None and title != None :
- soup = bs4.BeautifulSoup(html, 'lxml')
- html_title = ""
- html_title = soup.title.text
- if title in html_title:
- return True
- else:
- return None
- else:
- print('html or title is None')
- return None
- def shend_icmp_packet(ip_address):
- request_time = time.time()
- request_time = struct.pack('>d',request_time)
- response_packet = sr1(IP(dst=ip_address)/ICMP()/request_time,timeout=1,verbose = False)
- return response_packet
- def icmp_relay_time(ip_address):
- response_packet = shend_icmp_packet(ip_address)
- relay_time = time.time()
- if response_packet != None :
- response_time = response_packet.getlayer(Raw).load
- response_time = struct.unpack('>d',response_time)
- relay_time = (relay_time - response_time[0])*1000
- return relay_time
- else:
- return None
- def real_icmp_relay_time(gateway,ip_address):
- time_ipadd = icmp_relay_time(ip_address)
- time_gateway = icmp_relay_time(gateway)
- if time_ipadd == None or time_gateway == None:
- return None
- else:
- return time_ipadd - time_gateway
- def send_dns_packet(domainname,dnsserver):
- i = IP(dst=dnsserver)
- u = UDP(dport = 53)
- d = DNS(rd=1)
- d.qd = DNSQR(qname = domainname , qtype = 1 ,qclass = 1)
- dns_request_packet = i/u/d
- dns_response_packet = sr1(dns_request_packet,timeout=2,verbose = False)
- if dns_response_packet != None:
- dns_response_packet = dns_response_packet.getlayer(DNS).fields
- if dns_response_packet['rcode'] == 0 :
- return dns_response_packet
- elif dns_response_packet['rcode'] == 3 :
- print("Domain Name Error")
- return None
- elif dns_response_packet['rcode'] == 2 :
- print("Server Inside Failure")
- return None
- else:
- print("dns server no response")
- return None
- def main():
- # res = send_http_packet("www.baidu.com")
- # print(check_http(res,"百度"))
- res = real_icmp_relay_time("172.17.1.1","192.168.101.2")
- print(res)
- # res = send_dns_packet("www.baidu.com","114.114.114.144")
- # print(res)
- if __name__ == '__main__':
- main()
python 通过 http、dns、icmp判断网络状态的更多相关文章
- android——判断网络状态
平常我们玩qq的时候我们没联网 ,qq上面回显示"网络连接不给力,请检查网络连接"那么它是 通过什么方式判断网络是否连接的呢? 下面将写个案例展示如何检查网络连接状态的 由于我们这 ...
- Android判断网络状态
package com.ch.services; import com.ch.utils.NetWorkUtils; import android.app.Service; import androi ...
- Android学习总结——判断网络状态
package com.example.xch.broadcasttest; import android.content.BroadcastReceiver; import android.cont ...
- H5判断网络状态
1.判断网络连接的网络状态 if (navigator.onLine) { alert('online')} else { alert('offline');} 想要监听浏览器的联网状态, 使用win ...
- Android开发(七)——判断网络状态
项目中难免会出现使用网络的情况,使用网络前得进行网络判断,看网上的网友一般有多种实现版本. 第一种: // 是否有网络连接 public static boolean isNetworkConnect ...
- Unity如何判断网络状态?
根据Application.internetReachability来判断网络状态 NetworkReachability.NotReachable 网络不可用 NetworkReachability ...
- Android 中判断网络状态
首先在AndroidManifest.xml添加权限 <uses-permission android:name="android.permission.ACCESS_NETWORK_ ...
- iOS 判断网络连接状态的几种方法
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #801b80 } p.p2 ...
- AFN网络状态的时时监控以及网络的判断、
//3.判断网络状况 AFNetworkReachabilityManager *netManager = [AFNetworkReachabilityManager sharedManager ...
随机推荐
- Gartner 2018 数据库系列报告发布 巨杉数据库连续两年入选
近期,Gartner陆续发布了2018年的数据库系列报告,包括<数据库魔力象限><数据库核心能力>以及<数据库推荐报告>.其中,SequoiaDB巨杉数据库作为业界 ...
- CAN总线学习记录之一:CAN简介
CAN 是 Controller Area Net 的缩写,即控制器局部网,是一种有效支持分布控制或实时控制的串行通信网络.CAN 是德国 Bosch 公司为汽车的监测.控制系统而设计的,如控制发动机 ...
- [React] 从零开始的react
组件 1. 无状态组件 在React中,组件的名字必须用大写字母开头,而包含该组件定义的文件名也应该是大写字母(便于区分,也可以不是). 无状态组件是纯展示组件,仅仅只是用于数据的展示,只根据传入的p ...
- 改善 C# 的语言习惯(一) - 使用属性而不是可访问的数据成员(整理中)
改善 C# 的语言习惯(一) - 使用属性而不是可访问的数据成员 序 为什么我们的程序运行得棒棒的,还要改呢?Why? 答:我们要让程序运行得更快,执行的效率更高,代码的可读性更强,维护的成本更低.. ...
- 为什么我的gridview.DataKeys.count总是为零?并提示索引超出范围
第一个原因 你没有设置DataKeyNames属性, 第二个原因 你的DataSource是NUll值 第二个原因 DataKeyNames字段区分大小写
- python学习笔记(七)、异常
在实际开发中,往往不会出现一个系统编写下来,没有出现任何一个bug.为处理这种会出现错误的地方,如除数为零的除法,python提供了非常强大的机制————异常处理机制. 1 异常 python使用异常 ...
- Html和Css学习笔记-css基础知识
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 此篇博客是我的复习笔记,html和css学的时间太久了,忘得差不多了,最近要使用一下,所以重新打开html的书略读,后记录了标签 ...
- js数组方法详解(最新最全)
数组是js中最常用到的数据集合,其内置的方法有很多,熟练掌握这些方法,可以有效的提高我们的工作效率,同时对我们的代码质量也是有很大影响.本文所有的栗子都是在es7环境下测试的,如果有问题欢迎留言交流 ...
- ASP.NET没有魔法——ASP.NET MVC IoC代码篇
上一篇文章主要以文字的形式介绍了IoC及其在ASP.NET MVC中的使用,本章将从以下几点介绍如何使用代码在ASP.NET MVC中实现依赖注入: ● AutoFac及安装 ● 容器的创建 ● 创建 ...
- linux 按行分割文件
$ sudo awk 'NR%2==1{close(p".txt");++p}{print > p".txt"}' test.txt $ sudo spl ...