#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判断网络状态的更多相关文章

  1. android——判断网络状态

    平常我们玩qq的时候我们没联网 ,qq上面回显示"网络连接不给力,请检查网络连接"那么它是 通过什么方式判断网络是否连接的呢? 下面将写个案例展示如何检查网络连接状态的 由于我们这 ...

  2. Android判断网络状态

    package com.ch.services; import com.ch.utils.NetWorkUtils; import android.app.Service; import androi ...

  3. Android学习总结——判断网络状态

    package com.example.xch.broadcasttest; import android.content.BroadcastReceiver; import android.cont ...

  4. H5判断网络状态

    1.判断网络连接的网络状态 if (navigator.onLine) { alert('online')} else { alert('offline');} 想要监听浏览器的联网状态, 使用win ...

  5. Android开发(七)——判断网络状态

    项目中难免会出现使用网络的情况,使用网络前得进行网络判断,看网上的网友一般有多种实现版本. 第一种: // 是否有网络连接 public static boolean isNetworkConnect ...

  6. Unity如何判断网络状态?

    根据Application.internetReachability来判断网络状态 NetworkReachability.NotReachable 网络不可用 NetworkReachability ...

  7. Android 中判断网络状态

    首先在AndroidManifest.xml添加权限 <uses-permission android:name="android.permission.ACCESS_NETWORK_ ...

  8. iOS 判断网络连接状态的几种方法

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #801b80 } p.p2 ...

  9. AFN网络状态的时时监控以及网络的判断、

    //3.判断网络状况    AFNetworkReachabilityManager *netManager = [AFNetworkReachabilityManager sharedManager ...

随机推荐

  1. 痞子衡嵌入式:飞思卡尔Kinetis开发板OpenSDA调试器那些事(上)- 背景与架构

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis MCU开发板板载OpenSDA调试器(上篇). 众所周知,嵌入式软件开发几乎离不开调试器,因为写一个稍有代码规模 ...

  2. Spring基础系列-容器启动流程(1)

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9870339.html 概述 ​ 我说的容器启动流程涉及两种情况,SSM开发模式和Spri ...

  3. JQuery——选择器

    简单介绍一下什么是选择器:选择器是CSS样式中用来选择页面元素的一个特有的方式,而JQuery的选择器同样也是如此,JQuery的选择器简单的分为一下这几种:1.常用的CSS选择器 标签选择器:E{ ...

  4. 使用DataSet與DataAdapter對數據庫進行操作

    1.定義連接字符串 var source = "server=(local); integrated security=SSPI; database=test"; var conn ...

  5. C# 获取电脑的网络连接状态

    判断连网的方法介绍 1. InternetGetConnectedState 此函数获取网络状态有延时,且对网卡伤害较大 MSDN官方自己推荐不建议使用,不管是连网状态下还是断网情况下,获取的网络状态 ...

  6. ionic3 Alert组件的使用方法

    html页面 <button ion-button color="danger" class="button-block button-round-ios" ...

  7. C++ 11 Lambda表达式

    C++11的一大亮点就是引入了Lambda表达式.利用Lambda表达式,可以方便的定义和创建匿名函数.对于C++这门语言来说来说,“Lambda表达式”或“匿名函数”这些概念听起来好像很深奥,但很多 ...

  8. java之网络爬虫介绍

    文章大纲 一.网络爬虫基本介绍二.java常见爬虫框架介绍三.WebCollector实战四.项目源码下载五.参考文章   一.网络爬虫基本介绍 1. 什么是网络爬虫   网络爬虫(又被称为网页蜘蛛, ...

  9. 两种常用的全排列算法(java)

    问题:给出一个字符串,输出所有可能的排列. 全排列有多种算法,此处仅介绍常用的两种:字典序法和递归法. 1.字典序法: 如何计算字符串的下一个排列了?来考虑"926520"这个字符 ...

  10. JMeter中文返回乱码

    JMeter中文返回乱码 结果树响应数据中文返回乱码 其实有几个方法: 在线程组->http请求的字符集里设置 ​ 在http 消息管理头中设置 ​ 3.如果以上方法还没有解决,请打开安装目录 ...