利用Python進行埠掃瞄

2022-05-04 04:27:09 字數 3331 閱讀 2118

在linux中判斷一台主機是否可達,可以使用ping命令,而判斷埠是否開啟,可以使用telnet命令,但是telnet命令沒有超時時間的引數,使用起來不是很方便,那麼可以利用python來完成乙個埠掃瞄的功能

#!/usr/bin/env python

import socket

def get_ip_status(ip,port):

server =socket.socket(socket.af_inet, socket.sock_stream)

try:

server.connect((ip,port))

print(

' port is open

'.format(ip, port))

except exception

aserr:

print(

' port is not open

'.format(ip,port))

finally

: server.close()

if __name__ == '

__main__':

host = '

10.0.0.11

'for port in range(20,100

): get_ip_status(host,port)

上面使用的是python的socket模組完成的埠檢測, 其實python的內建模組telnetlib也可以完成埠檢測任務

import

telnetlib

defget_ip_status(ip,port):

server = telnetlib.telnet() #

建立乙個telnet物件

try:

server.open(ip,port)

#利用telnet物件的open方法進行tcp鏈結

print('

port is open

'.format(ip, port))

except

exception as err:

print('

port is not open

'.format(ip,port))

finally

: server.close() if

__name__ == '

__main__':

host = '

10.0.0.11

'for port in range(20,100):

get_ip_status(host,port)

當然上面這兩種方式都是序列執行的,這在多ip多埠的情況下是非常慢得,所以引入多執行緒threading模組。

#

!/usr/bin/env python

import

telnetlib

import

threading

defget_ip_status(ip,port):

server =telnetlib.telnet()

try:

server.open(ip,port)

print('

port is open

'.format(ip, port))

except

exception as err:

print('

port is not open

'.format(ip,port))

finally

: server.close() if

__name__ == '

__main__':

host = '

10.0.0.11

'threads =

for port in range(20,100):

t = threading.thread(target=get_ip_status,args=(host,port))

t.start()

for t in

threads:

t.join()

前面的例子中我們的程式為每個ip的每個埠建立乙個執行緒,在ip和port較多的時候,會暴露出各種問題(比如頻繁的上下文切換),因此,我們需要限制程序數量,那麼可以利用queue模組。

#

!/usr/bin/env python

import

telnetlib

import

threading

import

queue

defget_ip_status(ip):

server =telnetlib.telnet()

for port in range(20,100):

try:

server.open(ip,port)

print('

port is open

'.format(ip, port))

except

exception as err:

print('

port is not open

'.format(ip,port))

finally

: server.close()

defcheck_open(q):

try:

while

true:

ip =q.get_nowait()

get_ip_status(ip)

except

queue.empty as e:

pass

if__name__ == '

__main__':

host = ['

10.0.0.10

','10.0.0.11

','10.0.0.12

'] #

這裡模擬多ip位址的情況,也可以從檔案中讀取ip——list

q =queue.queue()

for ip in

host:

q.put(ip)

threads =

for i in range(10):

t = threading.thread(target=check_open,args=(q,))

t.start()

for t in

threads:

t.join()

這裡使用了queue,那麼就會引出生產者和消費者模型,生產者只需要把資訊存入到佇列中,消費者消費時只需要看佇列中有沒有,這樣極大程度了解耦了我們的程式。

利用Python進行埠掃瞄

在linux中判斷一台主機是否可達,可以使用ping命令,而判斷埠是否開啟,可以使用telnet命令,但是telnet命令沒有超時時間的引數,使用起來不是很方便,那麼可以利用python來完成乙個埠掃瞄的功能 usr bin env python import socket def get ip s...

利用Python進行埠掃瞄

在linux中判斷一台主機是否可達,可以使用ping命令,而判斷埠是否開啟,可以使用telnet命令,但是telnet命令沒有超時時間的引數,使用起來不是很方便,那麼可以利用python來完成乙個埠掃瞄的功能 usr bin env python import socket def get ip s...

利用Python進行埠掃瞄

在linux中判斷一台主機是否可達,可以使用ping命令,而判斷埠是否開啟,可以使用telnet命令,但是telnet命令沒有超時時間的引數,使用起來不是很方便,那麼可以利用python來完成乙個埠掃瞄的功能 usr bin env python import socket def get ip s...