欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python批量檢測(cè)服務(wù)器端口可用性與Socket函數(shù)使用

系統(tǒng) 1963 0

socket函數(shù)

簡(jiǎn)述

socket又稱(chēng)套間字或者插口,是網(wǎng)絡(luò)通信中必不可少的工具。有道是:“無(wú)socket,不網(wǎng)絡(luò)”。由于socket最早在BSD Unix上使用,而Unix/Linux所奉為經(jīng)典的至高哲學(xué)是“一切皆是文件”。因此socket在使用時(shí)也是完全符合這個(gè)哲學(xué)的,它涉及到listen()、bind()、accept()、write()/read()、close()等基本的類(lèi)似于文件操作的功能函數(shù)。

socket用法

            
              import socket
socket.socket(socket_family,socket_type,protocal=0)
#socket_family 可以是 AF_UNIX 或 AF_INET。socket_type 可以是 SOCK_STREAM 或 SOCK_DGRAM。protocol 一般不填,默認(rèn)值為 0。

#獲取tcp/ip套接字
tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#獲取udp/ip套接字
udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

#由于 socket 模塊中有太多的屬性。我們?cè)谶@里破例使用了'from module import *'語(yǔ)句。

#使用 'from socket import *',我們就把 socket 模塊里的所有屬性都帶到我們的命名空間里了,這樣能 大幅減短我們的代碼。

#例如tcpSock = socket(AF_INET, SOCK_STREAM)
            
          

服務(wù)端套接字

s.bind() #綁定(主機(jī),端口號(hào))到套接字
s.listen() #開(kāi)始TCP監(jiān)聽(tīng)
s.accept() #被動(dòng)接受TCP客戶(hù)的連接,(阻塞式)等待連接的到來(lái)

客戶(hù)端套接字

s.connect() #主動(dòng)初始化TCP服務(wù)器連接
s.connect_ex() #connect()函數(shù)的擴(kuò)展版本,出錯(cuò)時(shí)返回出錯(cuò)碼,而不是拋出異常

公共用途套接字

s.recv() #接收TCP數(shù)據(jù)
s.send() #發(fā)送TCP數(shù)據(jù)(send在待發(fā)送數(shù)據(jù)量大于己端緩存區(qū)剩余空間時(shí),數(shù)據(jù)丟失,不會(huì)發(fā)完)
s.sendall() #發(fā)送完整的TCP數(shù)據(jù)(本質(zhì)就是循環(huán)調(diào)用send,sendall在待發(fā)送數(shù)據(jù)量大于己端緩存區(qū)剩余空間時(shí),數(shù)據(jù)不丟失,循環(huán)調(diào)用send直到發(fā)完)
s.recvfrom() #接收UDP數(shù)據(jù)
s.sendto() #發(fā)送UDP數(shù)據(jù)
s.getpeername() #連接到當(dāng)前套接字的遠(yuǎn)端的地址
s.getsockname() #當(dāng)前套接字的地址
s.getsockopt() #返回指定套接字的參數(shù)
s.setsockopt() #設(shè)置指定套接字的參數(shù)
s.close() #關(guān)閉套接字

面向鎖的套接字

s.setblocking() #設(shè)置套接字的阻塞與非阻塞模式
s.settimeout() #設(shè)置阻塞套接字操作的超時(shí)時(shí)間

Python檢測(cè)端口

上面介紹了socket的一些基礎(chǔ)信息,那么需求是什么?批量檢測(cè)服務(wù)器、端口,是否被占用…
聽(tīng)起來(lái)比較簡(jiǎn)單,起初也是這么認(rèn)為的。但socket的坑確實(shí)不少啊!

連接方式

上面提到了s.connect()與s.connect_ex(),更推薦使用s.connect_ex(),而非使用主動(dòng)連接的s.connect()獲取異常方式。
這樣我們可以通過(guò)異常碼更方便的進(jìn)行判斷操作。基礎(chǔ)操作:

            
              # -*- coding: utf-8 -*-
# @Author   : 王翔
# @JianShu  : 清風(fēng)Python
# @Date     : 2019/8/27 1:26
# @Software : PyCharm
# @version  :Python 3.7.3
# @File     : IpPortCheck.py

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = s.connect_ex(('127.0.0.1', 80))
print(result)
            
          

快速檢測(cè)

當(dāng)我們了解了基礎(chǔ)操作后,可以進(jìn)行下一步的檢測(cè)工作,但此時(shí)我們忽略了一個(gè)問(wèn)題,剛才我們檢測(cè)的是本機(jī)的ip,但如果我們檢測(cè)的是一個(gè)不存在的ip時(shí)會(huì)出現(xiàn)什么問(wèn)題?
如果我們使用connect方法觸發(fā)異常,并返回:

TimeoutError: [WinError 10060]
由于連接方在一段時(shí)間后沒(méi)有正確答復(fù)或連接的主機(jī)沒(méi)有反應(yīng),連接嘗試失敗。

如果我們使用connect_ex,則打印返回碼10060。
但兩者都存在一個(gè)問(wèn)題,就是超時(shí)時(shí)間會(huì)等待很久。那么如何操作?一般的網(wǎng)絡(luò)監(jiān)測(cè),設(shè)置3秒的時(shí)間就夠了,所以添加 s.settimeout(3) 配置即可,當(dāng)超時(shí)后,會(huì)引發(fā) socket.timeout: timed out 異常,使用connect_ex則返回10035的狀態(tài)碼。

關(guān)于異常報(bào)錯(cuò)

TimeoutError: [WinError 10060] 由于連接方在一段時(shí)間后沒(méi)有正確答復(fù)或連接的主機(jī)沒(méi)有反應(yīng),連接嘗試失敗。
ConnectionRefusedError: [WinError 10061] 由于目標(biāo)計(jì)算機(jī)積極拒絕,無(wú)法連接。

完整判斷代碼

            
              # -*- coding: utf-8 -*-
# @Author   : 王翔
# @JianShu  : 清風(fēng)Python
# @Date     : 2019/8/27 1:26
# @Software : PyCharm
# @version  :Python 3.7.3
# @File     : IpPortCheck.py

import socket

IPs = ['127.0.0.1', '10.45.226.74']
Ports = [22, 80, 8080]

for ip in IPs:
    for port in Ports:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.settimeout(3)
        result = s.connect_ex((ip, port))
        if result == 0:
            print("The Server IP: {} , Port {} has been used".format(ip, port))
        elif result == 10061:
            print("The Server IP: {} , Port {} not enabled".format(ip, port))
        elif result == 10035:
            print("The Server IP: {} , no response".format(ip, port))
        else:
            print(result)
        s.close()

output:
The Server IP: 127.0.0.1 , Port 22 not enabled
The Server IP: 127.0.0.1 , Port 80 has been used
The Server IP: 127.0.0.1 , Port 8080 not enabled
The Server IP: 10.45.226.74 , no response
The Server IP: 10.45.226.74 , no response
The Server IP: 10.45.226.74 , no response
            
          

The End

OK,今天的內(nèi)容就到這里,如果覺(jué)得內(nèi)容對(duì)你有所幫助,歡迎點(diǎn)擊文章右下角的“ 在看 ”。
期待你關(guān)注我的公眾號(hào) 清風(fēng)Python ,如果覺(jué)得不錯(cuò),希望能動(dòng)動(dòng)手指轉(zhuǎn)發(fā)給你身邊的朋友們。

作者:清風(fēng)Python


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 国产在线中文字幕 | 日韩在线电影 | 国产精品69人妻无码久久久 | 蜜桃精品噜噜噜成人av | 色125综合网| 日韩福利片 | 中文字幕久久久 | 欧美一区二区三区在线视频 | 欧美精品网站 | 亚洲www啪成人一区二区麻豆 | 亚洲在线观看免费视频 | 欧美一级电影视频 | 加勒比精品久久一区二区三区 | 免费能直接在线观看黄的视频 | 日韩国产成人资源精品视频 | 性欧美tube 精品 | 国产日韩欧美在线观看不卡 | 国产精品夜夜爽 | 免费人成网站线观看合集 | 国产一区二区三区久久久久久久久 | 天天拍天天操 | 美国av在线免费观看 | 国产精品免费入口视频 | 欧美激情高清 | 九九热色 | 精品久久久久久久久久久 | 大喷水| 一级做a爰片久久毛片人呢 达达兔午夜起神影院在线观看麻烦 | 色成人亚洲 | 国产精品主播视频 | 亚洲日韩精品AV无码富二代 | 免费高清seyeye在线视频观看 | 91麻豆精品国产91久久久更新资源速度超快 | 欧美伊人久久综合网 | 久久精品综合电影 | 午夜精品久久久久久久久久久久久 | 99久热| 九九视频只有精品六 | 日韩欧美一区二区视频 | 成人自拍在线 | 色综合天天综一个色天天综合网 |