亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python批量檢測服務器端口可用性與Socket函數使用

系統 1894 0

socket函數

簡述

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

socket用法

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

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

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

#由于 socket 模塊中有太多的屬性。我們在這里破例使用了'from module import *'語句。

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

#例如tcpSock = socket(AF_INET, SOCK_STREAM)
            
          

服務端套接字

s.bind() #綁定(主機,端口號)到套接字
s.listen() #開始TCP監聽
s.accept() #被動接受TCP客戶的連接,(阻塞式)等待連接的到來

客戶端套接字

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

公共用途套接字

s.recv() #接收TCP數據
s.send() #發送TCP數據(send在待發送數據量大于己端緩存區剩余空間時,數據丟失,不會發完)
s.sendall() #發送完整的TCP數據(本質就是循環調用send,sendall在待發送數據量大于己端緩存區剩余空間時,數據不丟失,循環調用send直到發完)
s.recvfrom() #接收UDP數據
s.sendto() #發送UDP數據
s.getpeername() #連接到當前套接字的遠端的地址
s.getsockname() #當前套接字的地址
s.getsockopt() #返回指定套接字的參數
s.setsockopt() #設置指定套接字的參數
s.close() #關閉套接字

面向鎖的套接字

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

Python檢測端口

上面介紹了socket的一些基礎信息,那么需求是什么?批量檢測服務器、端口,是否被占用…
聽起來比較簡單,起初也是這么認為的。但socket的坑確實不少啊!

連接方式

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

            
              # -*- coding: utf-8 -*-
# @Author   : 王翔
# @JianShu  : 清風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)
            
          

快速檢測

當我們了解了基礎操作后,可以進行下一步的檢測工作,但此時我們忽略了一個問題,剛才我們檢測的是本機的ip,但如果我們檢測的是一個不存在的ip時會出現什么問題?
如果我們使用connect方法觸發異常,并返回:

TimeoutError: [WinError 10060]
由于連接方在一段時間后沒有正確答復或連接的主機沒有反應,連接嘗試失敗。

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

關于異常報錯

TimeoutError: [WinError 10060] 由于連接方在一段時間后沒有正確答復或連接的主機沒有反應,連接嘗試失敗。
ConnectionRefusedError: [WinError 10061] 由于目標計算機積極拒絕,無法連接。

完整判斷代碼

            
              # -*- coding: utf-8 -*-
# @Author   : 王翔
# @JianShu  : 清風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,今天的內容就到這里,如果覺得內容對你有所幫助,歡迎點擊文章右下角的“ 在看 ”。
期待你關注我的公眾號 清風Python ,如果覺得不錯,希望能動動手指轉發給你身邊的朋友們。

作者:清風Python


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 中国大陆高清aⅴ毛片 | 欧美日韩一二三区免费视频观看 | 亚洲毛片在线 | 四虎永久免费 | 国产精品美女一区二区三区 | 久久综合九色综合狠狠97 | 草草国产成人免费视频 | 手机看片精品高清国产日韩 | 欧美成人性色生活片天天看 | 欧美性色欧美a在线观看 | 国产综合在线播放 | 伊人网综合在线视频 | 成人精品国产亚洲欧洲 | 婷婷五 在线播放 | 亚洲 国产 图片 | 日本wwwsss| 91最新免费地址入口 | 亚洲综合色色图 | 国产一区二区精品久久 | 久久国产精品久久精品国产 | 热99精品只有里视频最新 | 美女羞羞网站 | 黄色影院在线看 | 91国内精品久久久久免费影院 | 国产精品久久在线观看 | 国产成人无精品久久久久国语 | 欧美性xxxx另类 | 国产香蕉网 | 男女xxⅹ爽免费视频 | 九九热最新视频 | 日韩精品中文字幕视频一区 | 国产亚洲精品久久yy5099 | 久久精品在线观看 | 成年人黄视频大全 | 天天操天天干天天舔 | 色天使久久综合网天天 | 中文字幕亚洲精品第一区 | 欧美三级欧美成人高清www | 四虎精品福利视频精品 | 一级特黄特黄的大片免费 | 国产精品福利社 |