国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何利用Python實現快速Ping一個IP網段地址?

馬哥Linux運維 ? 來源:散盡浮華 2021 ? 作者:散盡浮華 2021 ? 2021-06-29 15:59 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

ping 命令是我們檢查網絡中最常用的命令,作為網絡人員,基本上每天都會用到,可以很好地幫助我們分析和判定網絡故障;如果有 10 設備,100 臺設備,1000 臺設備怎么辦?一個個 ping 過去人都要瘋掉了,這種情況在大型網絡中我們有可能遇到,那怎么辦呢?我們今天來看下如何用 python 來實現批量 ping 測試主機。代碼如下:

#!/usr/bin/python3# -*- coding: utf-8 -*-import os

import argparse

import socket

import struct

import select

import time

ICMP_ECHO_REQUEST = 8 # Platform specific

DEFAULT_TIMEOUT = 0.1

DEFAULT_COUNT = 4class Pinger(object):

“”“ Pings to a host -- the Pythonic way”“”

def __init__(self, target_host, count=DEFAULT_COUNT, timeout=DEFAULT_TIMEOUT):

self.target_host = target_host

self.count = count

self.timeout = timeout

def do_checksum(self, source_string):

“”“ Verify the packet integritity ”“”

sum = 0

max_count = (len(source_string)/2)*2

count = 0

while count 《 max_count:

val = source_string[count + 1]*256 + source_string[count]

sum = sum + val

sum = sum & 0xffffffff

count = count + 2

if max_count《len(source_string):

sum = sum + ord(source_string[len(source_string) - 1])

sum = sum & 0xffffffff

sum = (sum 》》 16) + (sum & 0xffff)

sum = sum + (sum 》》 16)

answer = ~sum

answer = answer & 0xffff

answer = answer 》》 8 | (answer 《《 8 & 0xff00)

return answer

def receive_pong(self, sock, ID, timeout):

“”“

Receive ping from the socket.

”“”

time_remaining = timeout

while True:

start_time = time.time()

readable = select.select([sock], [], [], time_remaining)

time_spent = (time.time() - start_time)

if readable[0] == []: # Timeout

return

time_received = time.time()

recv_packet, addr = sock.recvfrom(1024)

icmp_header = recv_packet[20:28]

type, code, checksum, packet_ID, sequence = struct.unpack(

“bbHHh”, icmp_header

if packet_ID == ID:

bytes_In_double = struct.calcsize(“d”)

time_sent = struct.unpack(“d”, recv_packet[28:28 + bytes_In_double])[0]

return time_received - time_sent

time_remaining = time_remaining - time_spent

if time_remaining 《= 0:

return

def send_ping(self, sock, ID):

“”“

Send ping to the target host

”“”

target_addr = socket.gethostbyname(self.target_host)

my_checksum = 0

# Create a dummy heder with a 0 checksum.

header = struct.pack(“bbHHh”, ICMP_ECHO_REQUEST, 0, my_checksum, ID, 1)

bytes_In_double = struct.calcsize(“d”)

data = (192 - bytes_In_double) * “Q”

data = struct.pack(“d”, time.time()) + bytes(data.encode(‘utf-8’))

# Get the checksum on the data and the dummy header.

my_checksum = self.do_checksum(header + data)

header = struct.pack(

“bbHHh”, ICMP_ECHO_REQUEST, 0, socket.htons(my_checksum), ID, 1

packet = header + data

sock.sendto(packet, (target_addr, 1))

def ping_once(self):

“”“

Returns the delay (in seconds) or none on timeout.

”“”

icmp = socket.getprotobyname(“icmp”)

try:

sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, icmp)

except socket.error as e:

if e.errno == 1:

# Not superuser, so operation not permitted

e.msg += “ICMP messages can only be sent from root user processes”

raise socket.error(e.msg)

except Exception as e:

print(“Exception: %s” %(e))

my_ID = os.getpid() & 0xFFFF

self.send_ping(sock, my_ID)

delay = self.receive_pong(sock, my_ID, self.timeout)

sock.close()

return delay

def ping(self):

“”“

Run the ping process

”“”

for i in range(self.count):

print (“Ping to %s.。。” % self.target_host,)

try:

delay = self.ping_once()

except socket.gaierror as e:

print (“Ping failed. (socket error: ‘%s’)” % e[1])

break

if delay == None:

print (“Ping failed. (timeout within %ssec.)” % self.timeout)

else:

delay = delay * 1000

print(“Get pong in %0.4fms” % delay)

if __name__ == ‘__main__’:

alive = []

host_prefix = ‘192.168.242.’

for i in range(1, 255):

host = host_prefix + str(i)

pinger = Pinger(target_host=host)

delay = pinger.ping_once()

if delay == None:

print(“Ping %s 失敗,超時2秒” % host)

else:

print(“ping %s = %s ms” % (host, round(delay * 1000, 4)))

alive.append(host)

# time.sleep(0.5)

測試如下:

8b6ab878-d895-11eb-9e57-12bb97331649.gif

原文鏈接:www.yjsec.com/2020/11/07
編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 主機
    +關注

    關注

    0

    文章

    1053

    瀏覽量

    36741
  • Ping
    +關注

    關注

    0

    文章

    72

    瀏覽量

    16841
  • 代碼
    +關注

    關注

    30

    文章

    4967

    瀏覽量

    73958
  • python
    +關注

    關注

    57

    文章

    4876

    瀏覽量

    90024

原文標題:用 Python 實現快速 Ping 一個 IP 網段地址!

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    SCADA系統的NAT轉換與網段隔離解決方案

    IP172.16.0.x,兩者之間不在網段內便無法進行通信。加上部分設備存在相同IP沖突問題,導致SCADA系統的建設受到困擾。 對此,
    的頭像 發表于 12-26 15:54 ?285次閱讀
    SCADA系統的NAT轉換與<b class='flag-5'>網段</b>隔離解決方案

    網段隔離器解決IP沖突問題,實現網段通信

    在互聯網的世界里,每臺設備都如同擁有獨特的“家庭住址”——IP地址。設備之間的通信,就如同人與人之間交流需要知道對方的住址
    的頭像 發表于 11-19 14:32 ?361次閱讀
    <b class='flag-5'>網段</b>隔離器解決<b class='flag-5'>IP</b>沖突問題,<b class='flag-5'>實現</b>跨<b class='flag-5'>網段</b>通信

    工業NAT網關實現PLC、機床等設備IP地址沖突的解決方案

    在工業自動化項目中,工程師經常會遇到問題——IP地址沖突。比如臺編寫好程序的自動化設備,其內部PLC的
    的頭像 發表于 11-06 16:58 ?725次閱讀
    工業NAT網關<b class='flag-5'>實現</b>PLC、機床等設備<b class='flag-5'>IP</b><b class='flag-5'>地址</b>沖突的解決方案

    NAT網關能夠實現哪些工業設備的網段隔離

    NAT網關在工業場景中可實現PLC、HMI、CNC、DCS、MES等設備的網段隔離與跨網段通信,具體功能及設備支持如下 : 、核心功能實現
    的頭像 發表于 10-27 11:03 ?628次閱讀
    NAT網關能夠<b class='flag-5'>實現</b>哪些工業設備的<b class='flag-5'>網段</b>隔離

    網段隔離器適用于哪些設備的NAT轉換

    等)網段隔離和NAT 轉換,可以將不同網段IP地址成同一網段
    的頭像 發表于 10-24 10:52 ?474次閱讀
    <b class='flag-5'>網段</b>隔離器適用于哪些設備的NAT轉換

    NAT網關與網段隔離器有什么聯系

    景三維度展開分析: 、功能定位:互補性技術設計 NAT網關 核心功能是 網絡地址轉換(NAT) ,通過將私有IP地址轉換為公有
    的頭像 發表于 10-21 14:03 ?482次閱讀

    網段隔離器實現靜態NAT網絡通信

    在許多網絡場景中,不同網段之間需要進行通信,但又要保證各網段的相對獨立性和安全性。如果缺少網絡規劃與網段隔離,會使網絡面臨巨大的安全風險,各類網絡攻擊更容易傳播。而靜態NAT能夠在實現
    的頭像 發表于 08-16 13:44 ?937次閱讀

    網段隔離器哪個好用?有哪些推薦?

    網段隔離器(又稱NAT轉換網關)是解決網絡規劃、通信隔離與安全防護的核心設備,可實現網段通信、IP管理,在工業網絡安全等領域發揮關鍵作
    的頭像 發表于 08-08 11:07 ?1183次閱讀
    <b class='flag-5'>網段</b>隔離器哪個好用?有哪些推薦?

    編程軟件連接PLC出現IP沖突時如何解決?

    般來說,每個PLC都有自己的IP地址,用以和其他設備進行通信。而如果同網絡出現相同IP的設備,就會導致
    的頭像 發表于 07-31 17:08 ?1065次閱讀
    編程軟件連接PLC出現<b class='flag-5'>IP</b>沖突時如何解決?

    交換機無法Ping通本機IPv6接口地址問題

    某互聯網電視CDN網絡ZXR10 5960-56QU-HC(簡稱5960)交換機下掛CDN服務器,vlan-if接口地址作為服務器網關,在運行中出現服務器無法ping通IPv6網關,并且5960也無法ping通該接口的IPv6
    的頭像 發表于 07-22 11:25 ?2447次閱讀
    交換機無法<b class='flag-5'>Ping</b>通本機IPv6接口<b class='flag-5'>地址</b>問題

    NAT網關與網段隔離器有什么區別

    NAT網關與網段隔離器在網絡通信中扮演不同角色, NAT網關的核心功能是地址轉換與端口復用,側重解決IP資源短缺和跨網段通信問題;網段隔離器
    的頭像 發表于 07-16 15:19 ?789次閱讀

    NAT網關實現網段訪問與設備統管理

    在出廠時預設了固定的IP地址,更改成本較高,工期也較長,亟待高效可靠的解決方案。 物通博聯推出的NAT網關適用于生產網絡對PLC、HMI、CNC、DCS、MES等網絡通訊和數據采集,兼有跨網段隔離和
    的頭像 發表于 06-21 15:41 ?983次閱讀
    NAT網關<b class='flag-5'>實現</b>跨<b class='flag-5'>網段</b>訪問與設備統<b class='flag-5'>一</b>管理

    TECS OpenStack資源池虛擬機網絡二層地址無法互通的問題處理

    某運營商TECS OpenStack使用主機overlay SDN方案組網,運維人員在創建虛擬機測試虛擬機網絡狀態時發現問題:在其中臺主機上創建兩臺同網段虛擬機,虛擬機之間二層地址無法Pin
    的頭像 發表于 06-12 09:28 ?878次閱讀
    TECS OpenStack資源池虛擬機網絡二層<b class='flag-5'>地址</b>無法互通的問題處理

    網段通訊終極指南讓不同網段PLC設備實現無障礙對話

    直接通信的,需要特殊的配置或ip地址轉換器(耦合器)設備來實現通信,不同網段的PLC通訊需要跨網段耦合器。用捷米特功能模塊JM-ETH-NA
    的頭像 發表于 04-23 09:49 ?954次閱讀
    跨<b class='flag-5'>網段</b>通訊終極指南讓不同<b class='flag-5'>網段</b>PLC設備<b class='flag-5'>實現</b>無障礙對話

    網段隔離器實現網段PLC數據通信

    在工廠自動化生產中,不同生產環節的PLC處于不同網段實現網段PLC數據通信對提升生產協同性至關重要。網段隔離器憑借自身特性,可有效解決這
    的頭像 發表于 04-18 15:15 ?947次閱讀
    <b class='flag-5'>網段</b>隔離器<b class='flag-5'>實現</b>多<b class='flag-5'>網段</b>PLC數據通信