#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. MVC基本开发介绍 (1)列表展示

    前言: 现在如果用.net 的解决方案来做网站或者是网站的后台管理系统,MVC 应该是比较流行的. 自从进了新公司后,也一直在用mvc + webapi 来做项目,这里做个分享性的总结,有更好的方法欢 ...

  2. ABP框架 将EntityFrameworkCore生成的SQL语句输出到控制台

    首先 在 EntityFrameworkCore中安装 Microsoft.Extensions.Logging.Console nuget install Microsoft.Extensions. ...

  3. 【转载】C#处理空格和换行

    使用C#处理字符串是一个常见的情况,当字符串中含有空格或者换行符号的时候,如果业务需要,我们可以通过相应的方法将之处理掉,处理成不含空格和换行符号的字符串,处理的过程使用到正则表达式. 具体函数处理的 ...

  4. [Go] golang缓冲通道实现资源池

    go的pool资源池:1.当有多个并发请求的时候,比如需要查询数据库2.先创建一个2个容量的数据库连接资源池3.当一个请求过来的时候,去资源池里请求连接资源,肯定是空的就创建一个连接,执行查询,结束后 ...

  5. JS之This的用法

    This的用法 This作为JavaScript中的关键字,在函数中具有四种用法. 一.直接在函数中使用,谁调用这个函数,this就指向谁 例如: var n = "指我"; fu ...

  6. Dynamics 365-如何利用Audit History还原被删除的数据

    Audit History,常被用来记录record的日常操作信息,包括创建,更新,删除.这是一个非常实用的功能,想想看,如果数据被误修改了,通过Audit History,可以很容易地找到修改前的数 ...

  7. java 线程方法 ---- yiled()

    class MyThread3 implements Runnable{ @Override public void run() { for (int i = 0; i < 3; i++){ / ...

  8. 转载: ssh连接上华为云Linux服务器,一会就自动断开

    原文链接:https://www.cnblogs.com/mspeer/p/9907734.html 客户端向服务端发送心跳 依赖 ssh 客户端定时发送心跳,putty.SecureCRT.XShe ...

  9. Docker 镜像编排并部署SpringBoot应用

    Docker-compose是一个基于Docker的编排工具,所谓编排个人理解就是将不同的镜像通过配置,组成一个新的运行环境,官方定义是:Compose is a tool for defining ...

  10. js 数组去重小技巧

    js 数组去重小技巧 Intro 今天遇到一个问题,需要对数据进行去重,想看一下有没有什么比较方便的方法,果然有些收获. Question 问题描述: 我有一个这样的数据: [ { "Pro ...