python 端口扫描_Python编写端口扫描程序

本文介绍如何使用Python和内置的Socket模块创建一个简单的端口扫描程序。该程序能够尝试在指定主机的所有端口上建立连接,并报告开放端口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总览

这篇文章将向您展示如何制编写端口扫描程序。使用Python可以执行多种操作,而我将使用内置模块Socket(套接字)来完成此操作。

Socket(套接字)

Python中的Socket(套接字)模块提供对BSD套接字接口的访问。它包括用于处理实际数据通道的Socket(套接字)类,以及用于网络相关任务的功能,例如将服务器的名称转换为地址并格式化要通过网络发送的数据。

套接字在Internet上被广泛使用,因为它们是计算机进行任何类型网络通信基础组件。例如,您使用的网络浏览器会打开一个套接字并连接到网络服务器(网站)。任何网络通信都通过套接字进行,有关套接字模块的更多信息,请参见官方文档。

套接字功能

在开始使用示例程序之前,让我们看一下将要使用的一些套接字函数。

sock = socket.socket(socket_family,socket_type)创建套接字的语法

sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)创建一个流套接字

AF_INET套接字族(此处为地址族版本4或IPv4)

SOCK_STREAM套接字类型TCP连接

SOCK_DGRAM套接字类型UDP连接

gethostbyname("host")将主机名转换为IPv4地址格式

socket.gethostbyname_ex("host")将主机名转换为IPv4地址格式,扩展接口

socket.getfqdn("8.8.8.8")获取fqdn(完全限定域名)

socket.gethostname()返回计算机的主机名。

socket.error

套接字错误异常处理

使用Python套接字编写程序

下面介绍如何使用Python创建一个简单的端口扫描程序,该小型端口扫描程序将尝试在您为特定主机定义的每个端口上建立连接。

打开文本编辑器,复制并复制粘贴下面的代码。将文件另存为:portscanner.py,并退出编辑器

#!/usr/bin/env python

import socket

import subprocess

import sys

from datetime import datetime

# Clear the screen

subprocess.call('clear', shell=True)

# Ask for input

remoteServer = raw_input("Enter a remote host to scan: ")

remoteServerIP = socket.gethostbyname(remoteServer)

# Print a nice banner with information on which host we are about to scan

print "-" * 60

print "Please wait, scanning remote host", remoteServerIP

print "-" * 60

# Check what time the scan started

t1 = datetime.now()

# Using the range function to specify ports (here it will scans all ports between 1 and 1024)

# We also put in some error handling for catching errors

try:

for port in range(1,1025):

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

result = sock.connect_ex((remoteServerIP, port))

if result == 0:

print "Port {}: Open".format(port)

sock.close()

except KeyboardInterrupt:

print "You pressed Ctrl+C"

sys.exit()

except socket.gaierror:

print 'Hostname could not be resolved. Exiting'

sys.exit()

except socket.error:

print "Couldn't connect to server"

sys.exit()

# Checking the time again

t2 = datetime.now()

# Calculates the difference of time, to see how long it took to run the script

total = t2 - t1

# Printing the information to screen

print 'Scanning Completed in: ', total

然后我们运行程序,看看输出什么:

$ python portscanner.py

Enter a remote host to scan: www.your_host_example.com

------------------------------------------------------------

Please wait, scanning remote host xxxx.xxxx.xxxx.xxxx

------------------------------------------------------------

Port 21: Open

Port 22: Open

Port 23: Open

Port 80: Open

Port 110: Open

Port 111: Open

Port 143: Open

Port 443: Open

Port 465: Open

Port 587: Open

Port 993: Open

Port 995: Open

Scanning Completed in: 0:06:34.705170

免责声明

该程序旨在供个人测试其设备的弱安全性,如果将其用于任何其他用途,作者将不承担任何责任。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值