Python – 带有套接字的简单端口扫描器
可以扫描端口以检查哪些端口正在使用以及哪些端口是打开或空闲的。在Python中,“Socket”模块提供对 BSD 套接字接口的访问,该接口在所有平台上都可用。
要扫描端口,可以执行以下步骤:
1]识别主机的IP地址
2]创建新套接字
3]与端口建立连接
3]检查天气数据是否收到
5]关闭连接
要使用 socket 模块,我们必须导入它:
import socket
让我们看看更多来自 socket 模块的函数,它们可以用来创建简单的端口扫描器
使用 socket() 创建一个新的套接字对象。 socket()函数的语法是:
newSocket = socket.socket(socket_family, socket_type)
socket_family 是版本 4 或 6 的 ip 地址。默认为 IPV4。
AF_INET for socket family of address version 4
AF_INET6 for socket family of address version 6
socket_type 是连接类型,默认为 TCP 连接。
SOCK_STREAM for Socket type of TCP connections
SOCK_DGRAM for Socket type of UDP connections
返回一个字符串,其中包含Python解释器当前正在执行的机器的主机名。我们可以用 :
socket.gethostname()
如果主机名在 IPV6 中,则使用以下方法将主机名转换为 IPv4 地址格式。 IPv4 地址以字符串形式返回,例如“10.120.30.2”。如果主机名本身是 IPv4 地址,则原样返回。
socket.gethostbyname(hostname)
要将套接字绑定到地址,我们使用bind()方法。套接字必须尚未绑定。地址的格式取决于地址族。该函数的语法如下。
socket.bind(self,address)
关闭连接使用 close() 方法。此方法标记套接字已关闭。一旦发生这种情况,套接字对象上的所有未来操作都将失败。远程端将不再接收数据(在刷新队列数据后)。套接字在垃圾收集时自动关闭,但建议显式关闭()它们,或在它们周围使用 with 语句。语法是:
socket.close()
让我们看看扫描端口的实际代码。
#Python code for simple port scanning
import socket #importing library
ip = socket.gethostbyname (socket.gethostname()) #getting ip-address of host
for port in range(65535): #check for all available ports
try:
serv = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # create a new socket
serv.bind((ip,port)) # bind socket with address
except:
print('[OPEN] Port open :',port) #print open port number
serv.close() #close connection