python 判断网络状态_python 通过 http、dns、icmp判断网络状态

#http使用requests发包bs4解析,dns、icmp 使用scapy发包

importtimeimportthreadingimportrequests,bs4from scapy.all import *

from requests.exceptions importReadTimeout,ConnectTimeout,HTTPError,ConnectionErrorimportstructdefsend_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()returnresponse_htmlexceptReadTimeout:print('Read Timeout')returnNoneexceptConnectTimeout:print('Connect Timeout')returnNoneexceptHTTPError:print('HTTP Error')returnNoneexceptConnectionError:print('Connection Error')returnNonedefcheck_http(html,title):if html != None and title !=None :

soup= bs4.BeautifulSoup(html, 'lxml')

html_title= ""html_title=soup.title.textif title inhtml_title:returnTrueelse:returnNoneelse:print('html or title is None')returnNonedefshend_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)returnresponse_packetdeficmp_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

returnrelay_timeelse:returnNonedefreal_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:returnNoneelse:return time_ipadd -time_gatewaydefsend_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).fieldsif dns_response_packet['rcode'] ==0 :returndns_response_packetelif dns_response_packet['rcode'] == 3:print("Domain Name Error")returnNoneelif dns_response_packet['rcode'] == 2:print("Server Inside Failure")returnNoneelse:print("dns server no response")returnNonedefmain():#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()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值