1. #http使用requests发包bs4解析,dns、icmp 使用scapy发包
    import time
  2. import threading
  3. import requests,bs4
  4. from scapy.all import *
  5. from requests.exceptions import ReadTimeout,ConnectTimeout,HTTPError,ConnectionError
  6. import struct
  7.  
  8. def send_http_packet(url):
  9. requests.packages.urllib3.disable_warnings()
  10. 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"
  11. headers = {'User-Agent': user_agent}
  12. url = "http://" + url
  13. response_html= ""
  14. try:
  15. response = requests.get(url, headers)
  16. response_html = response.content.decode()
  17. return response_html
  18. except ReadTimeout:
  19. print('Read Timeout')
  20. return None
  21. except ConnectTimeout:
  22. print('Connect Timeout')
  23. return None
  24. except HTTPError:
  25. print('HTTP Error')
  26. return None
  27. except ConnectionError:
  28. print('Connection Error')
  29. return None
  30.  
  31. def check_http(html,title):
  32. if html != None and title != None :
  33. soup = bs4.BeautifulSoup(html, 'lxml')
  34. html_title = ""
  35. html_title = soup.title.text
  36. if title in html_title:
  37. return True
  38. else:
  39. return None
  40. else:
  41. print('html or title is None')
  42. return None
  43.  
  44. def shend_icmp_packet(ip_address):
  45. request_time = time.time()
  46. request_time = struct.pack('>d',request_time)
  47. response_packet = sr1(IP(dst=ip_address)/ICMP()/request_time,timeout=1,verbose = False)
  48. return response_packet
  49.  
  50. def icmp_relay_time(ip_address):
  51. response_packet = shend_icmp_packet(ip_address)
  52. relay_time = time.time()
  53. if response_packet != None :
  54. response_time = response_packet.getlayer(Raw).load
  55. response_time = struct.unpack('>d',response_time)
  56. relay_time = (relay_time - response_time[0])*1000
  57. return relay_time
  58. else:
  59. return None
  60.  
  61. def real_icmp_relay_time(gateway,ip_address):
  62. time_ipadd = icmp_relay_time(ip_address)
  63. time_gateway = icmp_relay_time(gateway)
  64. if time_ipadd == None or time_gateway == None:
  65. return None
  66. else:
  67. return time_ipadd - time_gateway
  68.  
  69. def send_dns_packet(domainname,dnsserver):
  70. i = IP(dst=dnsserver)
  71. u = UDP(dport = 53)
  72. d = DNS(rd=1)
  73. d.qd = DNSQR(qname = domainname , qtype = 1 ,qclass = 1)
  74. dns_request_packet = i/u/d
  75. dns_response_packet = sr1(dns_request_packet,timeout=2,verbose = False)
  76. if dns_response_packet != None:
  77. dns_response_packet = dns_response_packet.getlayer(DNS).fields
  78. if dns_response_packet['rcode'] == 0 :
  79. return dns_response_packet
  80. elif dns_response_packet['rcode'] == 3 :
  81. print("Domain Name Error")
  82. return None
  83. elif dns_response_packet['rcode'] == 2 :
  84. print("Server Inside Failure")
  85. return None
  86. else:
  87. print("dns server no response")
  88. return None
  89.  
  90. def main():
  91.  
  92. # res = send_http_packet("www.baidu.com")
  93. # print(check_http(res,"百度"))
  94.  
  95. res = real_icmp_relay_time("172.17.1.1","192.168.101.2")
  96. print(res)
  97.  
  98. # res = send_dns_packet("www.baidu.com","114.114.114.144")
  99. # print(res)
  100.  
  101. if __name__ == '__main__':
  102. 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. Gartner 2018 数据库系列报告发布 巨杉数据库连续两年入选

    近期,Gartner陆续发布了2018年的数据库系列报告,包括<数据库魔力象限><数据库核心能力>以及<数据库推荐报告>.其中,SequoiaDB巨杉数据库作为业界 ...

  2. CAN总线学习记录之一:CAN简介

    CAN 是 Controller Area Net 的缩写,即控制器局部网,是一种有效支持分布控制或实时控制的串行通信网络.CAN 是德国 Bosch 公司为汽车的监测.控制系统而设计的,如控制发动机 ...

  3. [React] 从零开始的react

    组件 1. 无状态组件 在React中,组件的名字必须用大写字母开头,而包含该组件定义的文件名也应该是大写字母(便于区分,也可以不是). 无状态组件是纯展示组件,仅仅只是用于数据的展示,只根据传入的p ...

  4. 改善 C# 的语言习惯(一) - 使用属性而不是可访问的数据成员(整理中)

    改善 C# 的语言习惯(一) - 使用属性而不是可访问的数据成员 序 为什么我们的程序运行得棒棒的,还要改呢?Why? 答:我们要让程序运行得更快,执行的效率更高,代码的可读性更强,维护的成本更低.. ...

  5. 为什么我的gridview.DataKeys.count总是为零?并提示索引超出范围

    第一个原因 你没有设置DataKeyNames属性, 第二个原因 你的DataSource是NUll值 第二个原因 DataKeyNames字段区分大小写

  6. python学习笔记(七)、异常

    在实际开发中,往往不会出现一个系统编写下来,没有出现任何一个bug.为处理这种会出现错误的地方,如除数为零的除法,python提供了非常强大的机制————异常处理机制. 1 异常 python使用异常 ...

  7. Html和Css学习笔记-css基础知识

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 此篇博客是我的复习笔记,html和css学的时间太久了,忘得差不多了,最近要使用一下,所以重新打开html的书略读,后记录了标签 ...

  8. js数组方法详解(最新最全)

    数组是js中最常用到的数据集合,其内置的方法有很多,熟练掌握这些方法,可以有效的提高我们的工作效率,同时对我们的代码质量也是有很大影响.本文所有的栗子都是在es7环境下测试的,如果有问题欢迎留言交流 ...

  9. ASP.NET没有魔法——ASP.NET MVC IoC代码篇

    上一篇文章主要以文字的形式介绍了IoC及其在ASP.NET MVC中的使用,本章将从以下几点介绍如何使用代码在ASP.NET MVC中实现依赖注入: ● AutoFac及安装 ● 容器的创建 ● 创建 ...

  10. linux 按行分割文件

    $ sudo awk 'NR%2==1{close(p".txt");++p}{print > p".txt"}' test.txt $ sudo spl ...