#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. #1 爬虫:豆瓣图书TOP250 「requests、BeautifulSoup」

    一.项目背景 随着时代的发展,国人对于阅读的需求也是日益增长,既然要阅读,就要读好书,什么是好书呢?本项目选择以豆瓣图书网站为对象,统计其排行榜的前250本书籍. 二.项目介绍 本项目使用Python ...

  2. JDK动态代理深入理解分析并手写简易JDK动态代理(上)

    原文同步发表至个人博客[夜月归途] 原文链接:http://www.guitu18.com/se/java/2019-01-03/27.html 作者:夜月归途 出处:http://www.guitu ...

  3. Shell编程(week4_day1)--技术流ken

    本节内容 1.shell简介 2. shell分类 3. 查看shell 4. 第一个shell脚本 5. shell编程常用命令   5.1 grep   5.2 cut   5.3 sort   ...

  4. 第57章 GrantValidationResult - Identity Server 4 中文文档(v1.0.0)

    该GrantValidationResult类模型补助确认为扩展授权和资源所有者密码授权的结果. 最常见的用法是使用身份验证(成功用例): context.Result = new GrantVali ...

  5. js autocomplete输入延迟触发执行事件

    需求:延迟查询,autocomplete延迟触发执行事件.当有下一个事件开始时,本次事件中断.目的是为了防止调用服务器过于频繁. var timeout = 0;//延时处理 $("#cus ...

  6. dsu on tree入门

    先瞎扯几句 说起来我跟这个算法好像还有很深的渊源呢qwq.当时在学业水平考试的考场上,题目都做完了不会做,于是开始xjb出题.突然我想到这么一个题 看起来好像很可做的样子,然而直到考试完我都只想出来一 ...

  7. WLST Hangs Up Because of Java VM ClassLoader Deadlock

    APPLIES TO: Oracle WebLogic Server - Version 10.0 to 10.3.6Information in this document applies to a ...

  8. Android 为TV端助力

    记录两次事情: 第一个给view添加动画效果,需要保证view是可以获取焦点的 第二个给listview,GridView设置选择器 listselector时,要保证他的子item无背景,否则选择器 ...

  9. (详细)华为荣耀V10 BKL-AL00的USB调试模式在哪里打开的步骤

    每当我们使用pc连接安卓手机的时候,如果手机没有开启Usb开发者调试模式,pc则无法成功检测到我们的手机,有时我们使用的一些功能比较强的的app比如以前我们使用的一个app引号精灵,老版本就需要开启U ...

  10. Lua在Redis中的应用

    转载至笑松小站http://blog.seoui.com/2018/01/27/redis-lua/ redis从2.6版本开始内置支持Lua解释器,解释器提供了3个函数来处理redis的命令redi ...