#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. Spring Boot 2.x(七):优雅的处理异常

    前言 异常的处理在我们的日常开发中是一个绕不过去的坎,在Spring Boot 项目中如何优雅的去处理异常,正是我们这一节课需要研究的方向. 异常的分类 在一个Spring Boot项目中,我们可以把 ...

  2. Shell编程(week4_day3)--技术流ken

    本节内容 1. shell流程控制 2. for语句 3. while语句 4. break和continue语句 5. case语句 6. shell编程高级实战 shell流程控制 流程控制是改变 ...

  3. ASP.net core 使用UEditor.Core 实现 ueditor 上传功能

    ASP.net core 使用UEditor.Core 实现 ueditor 上传功能 首先通过nuget 引用UEditor.Core,作者github:https://github.com/bai ...

  4. Java中float型最大值大于long型?

    float型在内存中占用的是4个字节的空间,而long型占用的是8个字节的空间. 注:float类型的范围是:一3.403E38~3.403E38.而long类型的范围是:-2^63~2^63-1(大 ...

  5. jQuery 嵌套 event 会触发多次的原因

    Html代码如下: <div id="cover"> <input type="button" id="inside" v ...

  6. webpack入门教程--2

    这次是创建第二个JS文件. 我们还是在app文件夹中创建一个叫做book2.js的JS文件,并在其中输入以下代码: module.exports = "It works from book2 ...

  7. Android 通过反射获取DatePicker 中的控件,并改变其颜色

    到最后也只是成功改变了中间部分的颜色. private void setDatePickerDividerColor(DatePicker datePicker) { // Divider chang ...

  8. 小米Max 2获取ROOT超级权限的经验

    小米Max 2有么好方法开通了root权限?大家都了解,安卓手机有root权限,如果手机开通了root相关权限,能够实现更完美的功能,打比方大家企业的营销部门的同事,使用某些营销工具都需要在root权 ...

  9. nodejs 使用 js 模块

    nodejs 使用 js 模块 Intro 最近需要用 nodejs 做一个爬虫,Google 有一个 Puppeteer 的项目,可以用它来做爬虫,有关 Puppeteer 的介绍网上也有很多,在这 ...

  10. 《我们不一样》Alpha冲刺_1-5

    第一天    日期:2018/6/15 1.1 今日完成任务情况以及遇到的问题. 马    兰.马   娟:用户.管理员数据库表的设计 李国栋.张惠惠:前端登录界面代码书写 伊力亚.张   康:配置s ...