當前位置:首頁 » 編程語言 » python關閉埠

python關閉埠

發布時間: 2023-02-04 01:15:36

python 查看埠是否開通

一、常見埠掃描的原理
0、秘密掃描

秘密掃描是一種不被審計工具所檢測的掃描技術。

它通常用於在通過普通的防火牆或路由器的篩選(filtering)時隱藏自己。

秘密掃描能躲避IDS、防火牆、包過濾器和日誌審計,從而獲取目標埠的開放或關閉的信息。由於沒有包含TCP 3次握手協議的任何部分,所以無法被記錄下來,比半連接掃描更為隱蔽。

但是這種掃描的缺點是掃描結果的不可靠性會增加,而且掃描主機也需要自己構造IP包。現有的秘密掃描有TCP FIN掃描、TCP ACK掃描、NULL掃描、XMAS掃描和SYN/ACK掃描等。

1、Connect()掃描

此掃描試圖與每一個TCP埠進行「三次握手」通信。如果能夠成功建立接連,則證明埠開發,否則為關閉。准確度很高,但是最容易被防火牆和IDS檢測到,並且在目標主機的日誌中會記錄大量的連接請求以及錯誤信息。

TCP connect埠掃描服務端與客戶端建立連接成功(目標埠開放)的過程:

① Client端發送SYN;

② Server端返回SYN/ACK,表明埠開放;

③ Client端返回ACK,表明連接已建立;

④ Client端主動斷開連接。

建立連接成功(目標埠開放)

TCP connect埠掃描服務端與客戶端未建立連接成功(目標埠關閉)過程:

① Client端發送SYN;

② Server端返回RST/ACK,表明埠未開放。

優點:實現簡單,對操作者的許可權沒有嚴格要求(有些類型的埠掃描需要操作者具有root許可權),系統中的任何用戶都有權力使用這個調用,而且如果想要得到從目標埠返回banners信息,也只能採用這一方法。

另一優點是掃描速度快。如果對每個目標埠以線性的方式,使用單獨的connect()調用,可以通過同時打開多個套接字,從而加速掃描。

缺點:是會在目標主機的日誌記錄中留下痕跡,易被發現,並且數據包會被過濾掉。目標主機的logs文件會顯示一連串的連接和連接出錯的服務信息,並且能很快地使它關閉。

2、SYN掃描

掃描器向目標主機的一個埠發送請求連接的SYN包,掃描器在收到SYN/ACK後,不是發送的ACK應答而是發送RST包請求斷開連接。這樣,三次握手就沒有完成,無法建立正常的TCP連接,因此,這次掃描就不會被記錄到系統日誌中。這種掃描技術一般不會在目標主機上留下掃描痕跡。但是,這種掃描需要有root許可權。

埠開放:1、Client發送SYN 2、Server端發送SYN/ACK 3、Client發送RST斷開(只需要前兩步就可以判斷埠開放)

埠關閉:1、Client發送SYN 2、Server端回復RST(表示埠關閉)

優點:SYN掃描要比TCP Connect()掃描隱蔽一些,SYN僅僅需要發送初始的SYN數據包給目標主機,如果埠開放,則相應SYN-ACK數據包;如果關閉,則響應RST數據包;

3、NULL掃描

㈡ python的串口close()函數關閉不成功

用ser.isOpen()查看返回False,說明ser.close()起作用了啊。用管理員身份打開cmd,再執行腳本試試?

㈢ 【telnetlib】使用Python登錄Cisco交換機執行命令

更多內容請點擊 我的博客 查看,歡迎來訪。

telnetlib --- Telnet client

最近要對交換機埠進行控制,如果每次使用命令去操作確實挺麻煩的,就使用腳本一鍵實現,並有記錄日誌的功能。參考 https://blog.csdn.net/study_in/article/details/89338016

Telnet.read_until(expected, timeout=None) : #讀取連接伺服器後顯示的內容,直到遇到同 expected 相同的位元組串。或者等待時間大於 timeout 時直接向下運行。

Telnet.read_very_eager() : 讀取從上次IO阻斷到現在所有的內容,返回的是位元組串,需要進行 decode() 編碼。如果連接關閉或者沒有可用數據時會拋出 EOFError ,如果沒有其他可用的數據,返回的是 b"" ,除非在IAC中間,否則不會阻礙。

Telnet.open(host, port=23[, timeout]) : 連接到主機,埠號為第二個可選參數,默認為標準的Telnet埠(23),可選的 timeout 參數指定連接的超時時間,如果未指定,將使用全局默認超時設置。不要嘗試去重新打開一個已經連接的實例對象。

Telnet.close() : 關閉連接。

Telnet.write(buffer) : # 將一個位元組串(byte string)寫進socket,如果連接被阻塞,這也會被阻塞,如果連接關閉,會拋出 OSError 。

Telnet.interact() : telnet的交互功能,下面用了一個死循環保證用戶能夠一直輸入命令進行某些操作,也可以使用 Telnet.interact() 這個方法來使所連接終端持久化,不過官網說 (emulates a very mb Telnet client)直譯是一個非常愚蠢的客戶端。

使用python實現對交換機埠關閉、打開功能。

㈣ 求助,python socket如何本地發送埠重用

在bind之前setsockopt設置SOL_SOCKET, SO_REUSEADDR就可以了, 因為關閉的埠處於TIME_WAIT狀態不能被重用.

㈤ Python能對USB介面進行管理么

先要安裝Pyserial

importserial

#設置埠和波特率
s=serial.Serial(port='COM4',baudrate=115200)

#埠寫數
s.write("2000 ")

#埠讀數
read_1=s.readline()#讀一行
read_2=s.read(4)#讀4bytes

#關閉埠
s.close()

㈥ python - serial communication(串口通信)

由於測試工作的需要,在C端產品上經常使用串口進行通信,而測試腳本大部分時候又採用python編寫,於是就不得不了解並熟悉python下的串口通信實現方法了,整理如下以備隨時使用:

一、說明

pyserial封裝了python環境下對串口的訪問,其兼容各種平台,並有統一的操作介面。通過python屬性訪問串口設置,並可對串口的各種配置參數(如串口名,波特率、停止校驗位、流控、超時等等)做修改,再進行串口通信的類與介面封裝後,非常方便地被調用和移植。

二、模塊安裝

pip insatll pyserial

三、初始化與參數說明

import serial

ser = serial.Serial('COM3', 115200, timeout=0.5, ....................)

下面看看 serial.Serial 原生類

四、不同平台下初始化

ser=serial.Serial("/dev/ttyUSB0",9600,timeout=0.5)#使用USB連接串列口ser=serial.Serial("/dev/ttyAMA0",9600,timeout=0.5)#使用樹莓派的GPIO口連接串列口ser=serial.Serial(1,9600,timeout=0.5)#winsows系統使用COM1口連接串列口ser=serial.Serial("COM1",9600,timeout=0.5)#winsows系統使用COM1口連接串列口ser=serial.Serial("/dev/ttyS1",9600,timeout=0.5)#Linux系統使用COM1口連接串列口

五、串口屬性

ser.name #串口名稱

ser.port #埠號

ser.baudrate #波特率

ser.bytesize #位元組大小

ser.parity #校驗位N-無校驗,E-偶校驗,O-奇校驗

ser.stopbits #停止位

ser.timeout #讀超時設置

ser.writeTimeout #寫超時

ser.xonxoff #軟體流控

ser.rtscts #硬體流控

ser.dsrdtr #硬體流控

ser.interCharTimeout #字元間隔超時 

六、串口常用方法

isOpen():查看埠是否被打開。

open() :打開埠『。

close():關閉埠。

read(size=1):從埠讀位元組數據。默認1個位元組。

read_all():從埠接收全部數據。

write(data):向埠寫數據。

readline():讀一行數據。

readlines():讀多行數據。

in_waiting():返回輸入緩存中的位元組數。

out_waiting():返回輸出緩存中的位元組數。

flush():等待所有數據寫出。

flushInput():丟棄接收緩存中的所有數據。

flushOutput():終止當前寫操作,並丟棄發送緩存中的數據。

sendBreadk(ration=0.25):發送BREAK條件,並於ration時間之後返回IDLE

setBreak(level=True):根據level設置break條件。

setRTS(level=True):設置請求發送(RTS)的控制信號

setDTR(level=True):設置數據終端准備就緒的控制信號

七、類與介面封裝

import time

import serial

import serial.tools.list_ports

# 串口操作類

class serialCommunication(object):

    def __init__(self, port, bps, timeout):# 可配置更多參數

        port_list =self.show_usable_com()

        if len(port_list) >0:

            if portnot in port_list:

                self.port = port_list[0]

            else:

                self.port = port

        else:

            print("no usable serial, please plugin your serial board")

            return

        self.bps = bps

        self.timeout = timeout

        try:

            # 初始化串口,並得到串口對象,根據需要可拓展更多參數

            self.ser = serial.Serial(self.port, self.bps, 8, 'N', 1, timeout=self.timeout, write_timeout=self.timeout)

        except Exception as e:# 拋出異常

            print("Exception={}".format(e))

    # 顯示可用串口列表

    @staticmethod

    def show_usable_com():

        serialport_list = []

        portInfo_list =list(serial.tools.list_ports.comports())

        if len(portInfo_list) <=0:

            print("can not find any serial port!")

        else:

            print(portInfo_list)

            for i in range(len(portInfo_list)):

                plist =list(portInfo_list[i])

                print(plist)

                serialport_list.append(plist[0])

            print(serialport_list)

            return serialport_list

# 輸出串口基本信息

    def serial_infor(self):

        print(self.ser.name)# 設備名字

        print(self.ser.port)# 讀或者寫埠

        print(self.ser.baudrate)# 波特率

        print(self.ser.bytesize)# 位元組大小

        print(self.ser.parity)# 校驗位

        print(self.ser.stopbits)# 停止位

        print(self.ser.timeout)# 讀超時設置

        print(self.ser.writeTimeout)# 寫超時

        print(self.ser.xonxoff)# 軟體流控

        print(self.ser.rtscts)# 軟體流控

        print(self.ser.dsrdtr)# 硬體流控

        print(self.ser.interCharTimeout)# 字元間隔超時

    # 打開串口

    def serial_open(self):

        try:

            if not self.ser.isOpen():

                self.ser.open()

        except Exception as e:# 拋出異常

            print("serial_open Exception={}".format(e))

            self.ser.close()

    # 讀取指定大小的數據

    # 從串口讀size個位元組。如果指定超時,則可能在超時後返回較少的位元組;如果沒有指定超時,則會一直等到收完指定的位元組數。

    def serial_read_with_size(self, size):

        try:

            self.serial_open()

            return self.ser.read(size).decode("utf-8")

        except Exception as e:

            print("serial_read_all Exception={}".format(e))

            self.ser.close()

    # 讀取當前串口緩存中的所有數據

    def serial_read_data(self):

        try:

            self.serial_open()

            datalen =self.ser.inWaiting()

            if datalen ==0:

                return None

            return self.ser.read(datalen).decode("utf-8")

        except Exception as e:

            print("serial_read_data Exception={}".format(e))

            self.ser.close()

    # 讀串口全部數據,注意timeout的設置

    # 在設定的timeout時間范圍內,如果讀取的位元組數據是有效的(就是非空)那就直接返回,

    # 否則一直會等到設定的timeout時間並返回這段時間所讀的全部位元組數據。

    def serial_read_all(self):

        try:

            self.serial_open()

            return self.ser.read_all().decode("utf-8")

        except Exception as e:

            print("serial_read_all Exception={}".format(e))

            self.ser.close()

    # 讀一行數據

    # 使用readline()時應該注意:打開串口時應該指定超時,否則如果串口沒有收到新行,則會一直等待。

    # 如果沒有超時,readline會報異常。

    def serial_read_line(self):

        try:

            self.serial_open()

            return self.ser.readline().decode("utf-8")

        except Exception as e:

            print("serial_read_line Exception={}".format(e))

            self.ser.close()

    # 讀多行數據,返回行列表

    def serial_read_lines(self):

        try:

            self.serial_open()

            return self.ser.readlines().decode("utf-8")

        except Exception as e:

            print("serial_read_lines Exception={}".format(e))

            self.ser.close()

    # 寫數據

    def serial_write_data(self, data):

        try:

            self.serial_open()

            self.ser.flushOutput()

            data_len =self.ser.write(data.encode('utf-8'))

            return data_len

        except Exception as e:

            print("serial_write_data Exception={}".format(e))

            return 0

    # 寫行數據,注意參數差異

    def serial_write_lines(self, lines):

        self.ser.writelines(lines)

    # 清除串口緩存

    def serial_clean(self):

        try:

            if self.ser.isOpen():

                self.ser.flush()

        except Exception as e:

            print("serial_clean Exception={}".format(e))

    # 關閉串口

    def serial_close(self):

        try:

            if self.ser.isOpen():

                self.ser.close()

        except Exception as e:

            print("serial_clean Exception={}".format(e))

if __name__ =='__main__':

    testSerial = serialCommunication("COM10", 1500000, 0.5)

    testSerial.serial_open()

    testSerial.serial_infor()

    testSerial.serial_write_data("ifconfig eth0\n")

    time.sleep(0.1)

    data = testSerial.serial_read_all()

    print(data)

    testSerial.serial_close()

八、其他

1)ser.VERSION表示pyserial版本; 另外,ser.name表示設備名稱

2)埠設置可以被讀入字典,也可從字典載入設置:

    getSettingDict():返回當前串口設置的字典

    applySettingDict(d):應用字典到串口設置

3) Readline()是讀一行,以/n結束,要是沒有/n就一直讀,阻塞。注意:打開串口時應該指定超時,否則如果串口沒有收到新行,則會一直等待。

4)serial.read_all 與 serial.read_all()區別

    serial.read_all:讀取串口所有的參數信息

    serial.read_all():超時時間內從串口讀取的所有數據

5) 異常信息

    exception serial.SerialException

    exception serial.SerialTimeoutException

㈦ 如何在ubuntu中命令行關閉python socket伺服器

本文介紹下,在solaris 系統下,python socket server重啟後,提示埠被佔用,telnet埠失敗。這里給出一個解決方法,有需要的朋友參考下。
在solaris 系統下,socket server被重啟後,提示埠被佔用,telnet埠又是不成功的,說明服務已被關閉。
通過netstat可以看到埠還處於於fin_wait_2狀態,solaris要4分鍾才能關閉。
遇到這個問題時,可以採用如下的方法解決,以減少等待時間。
1,加上s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)。
代碼:

復制代碼代碼示例:
self.host=socket.gethostbyname(socket.gethostname())
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((self.host,self.port))
s.listen(5)
2,修改系統fin_wait,time_wait的時間設置。這個時間改短,也利於系統系能。
修改方法
查看或設置:
使用get命令來確定當前時間間隔,並使用set命令將時間間隔指定為30秒。
例如:

復制代碼代碼示例:
ndd -get /dev/tcp tcp_time_wait_interval
ndd -set /dev/tcp tcp_time_wait_interval 30000
預設值:對於 Solaris 操作系統,預設等待時間間隔為 240000 毫秒(即 4 分鍾)。
建議值:60000 毫秒。
Solaris TCP_FIN_WAIT_2_FLUSH_INTERVAL
描述:
指定禁止處於FIN_WAIT_2狀態的連接保持該狀態的計時器時間間隔。
當連接比率較高時,這將累積大量的TCP/IP連接,從而導致伺服器性能下降。在高峰時間段,伺服器會發 生延遲。
如果伺服器延遲,netstat命令顯示對HTTP Server打開的許多套接字處於CLOSE_WAIT或FIN_WAIT_2狀態。
明顯的延遲可能會長達4分鍾,其間伺服器無法發送任何響應,但是CPU利用率保持很高,所有活動都在系統進程中。
查看和設置:
使用get命令來確定當前時間間隔,並使用set命令將時間間隔指定為67.5秒。
例如:

熱點內容
華為ftp在哪 發布:2024-11-01 22:36:33 瀏覽:288
java數組包含字元串 發布:2024-11-01 22:31:15 瀏覽:791
伺服器和家用電腦質量 發布:2024-11-01 22:28:29 瀏覽:488
sqlserver默認實例 發布:2024-11-01 22:23:42 瀏覽:959
sort排序java 發布:2024-11-01 22:23:26 瀏覽:47
解壓後的apk無法安裝 發布:2024-11-01 22:22:10 瀏覽:666
公司的pop伺服器地址 發布:2024-11-01 22:22:07 瀏覽:119
朵唯m30手機配置是真的嗎如何 發布:2024-11-01 22:16:56 瀏覽:681
夢幻西遊怎麼清理緩存 發布:2024-11-01 22:15:52 瀏覽:345
如何配置fcm 發布:2024-11-01 22:08:15 瀏覽:854