利用Python脚本写端口扫描器socket,python-nmap


Posted in Python onJuly 23, 2022

前言:

一个用python写的简单的端口扫描器,python环境为 3.7.0,windows系统

Socket模块编写

扫描给定主机是否开放了指定的端口

TCP连接扫描是利用TCP的三次握手来确定主机的端口是否开放。确定主机端口开放之后,给端口发送消息,接收端口返回的消息,然后判断该端口运行的服务。

使用时,-H 参数可以提供主机的域名或者ip地址,-p/-P 写要扫描的端口,多个端口用逗号分隔

# -*- coding: utf-8 -*-
import optparse
from socket import *
import threading
threadLock=threading.Lock() #实例化threadLock对象
def connScan(Host,Port):
try:
conn=socket(AF_INET,SOCK_STREAM)
conn.connect((Host,Port))
conn.send('test message'.encode("utf-8")) #发送测试信息给端口
results=conn.recv(100) #接收主机返回的信息
threadLock.acquire() #加锁
print('[+]%d/tcp open'% Port)
print('[+] '+results.decode("utf-8"))
conn.close()
except Exception as e:
threadLock.acquire()
print(e)
print('[-]%d/tcp closed'% Port)
finally:
threadLock.release() #释放锁
conn.close()
def portScan(Host,Ports):
try:
IP=gethostbyname(Host) ##获得对应主机的ip地址
except:
print("[-] Cannot resolve '%s':Unknown host" %Host)
return
try:
Name=gethostbyaddr(Host) ##获得ip对应主机的信息
print ("\n[+] Scan Results for:"+Name[0])
except:
print ("\n[+] Scan Results for:"+IP)
setdefaulttimeout(1)
for Port in Ports:
print ("Scanning port "+Port)
connScan(Host,int(Port))
def main():
usage="usage %prog -H <target host> -p/-P <target ports>"
parser=optparse.OptionParser(usage) #创建对象实例
parser.add_option('-H',dest='Host',type='string',help='target host') ##需要的命令行参数
parser.add_option('-P','-p',dest='Ports',type='string',help='target ports')
(options,args)=parser.parse_args()
Host=options.Host
Ports=str(options.Ports).split(',')
if (Host==None)|(Ports==None): ##如果主机和端口都是空的话
print(parser.usage)
exit(0)
portScan(Host,Ports)
if __name__=='__main__':
main()

利用Python脚本写端口扫描器socket,python-nmap

python-nmap模块编写 

我们还可以通过调用nmap进行端口扫描。

扫描给定ip或给定网段内指定端口是否开放

-H 参数可以扫描一个ip地址也可以扫描一个网段,-p 只能指定一个端口

# -*- coding: utf-8 -*-
import nmap
import optparse

def Test(Hosts,port):
nm=nmap.PortScanner()
nm.scan(Hosts,port)
port_int=int(port) #将端口从字符串转化为int类型的
for t in nm.all_hosts():
if nm[t].has_tcp(port_int): #如果445端口提供了TCP协议
state=nm[t]['tcp'][port_int]['state'] #判断该TCP 445 端口的状态
if state=='open':
print ('[+]Found Target Host:'+t)
return
def main():
usage="usage %prog -H <target host> -p/-P <target port>"
parser=optparse.OptionParser(usage) #创建对象实例
parser.add_option('-H',dest='Host',type='string',help='target host') ##需要的命令行参数
parser.add_option('-P','-p',dest='Port',type='string',help='target ports')
(options,args)=parser.parse_args()
Hosts=options.Host
Port=options.Port
if (Hosts==None)|(Port==None): #如果主机和端口都是空的话
print(parser.usage)
exit(0) #退出
else:
Test(Hosts,Port)
if __name__=='__main__':
main()

利用Python脚本写端口扫描器socket,python-nmap

到此这篇关于利用Python脚本写端口扫描器socket,python-nmap的文章就介绍到这了,更多相关Python socket,python-nmap内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现删除文件与目录的方法
Nov 10 Python
编写Python CGI脚本的教程
Jun 29 Python
Python基本语法经典教程
Mar 11 Python
Python 中的with关键字使用详解
Sep 11 Python
通过Py2exe将自己的python程序打包成.exe/.app的方法
May 26 Python
Django 路由控制的实现代码
Nov 08 Python
Django模型修改及数据迁移实现解析
Aug 01 Python
解决python 读取 log日志的编码问题
Dec 24 Python
Tensorflow加载Vgg预训练模型操作
May 26 Python
python 常见的排序算法实现汇总
Aug 21 Python
Python Http请求json解析库用法解析
Nov 28 Python
pytorch 中forward 的用法与解释说明
Feb 26 Python
Python+pyaudio实现音频控制示例详解
Jul 23 #Python
python高温预警数据获取实例
Jul 23 #Python
Python中的socket网络模块介绍
Jul 23 #Python
python解析照片拍摄时间进行图片整理
Jul 23 #Python
Python docx库删除复制paragraph及行高设置图片插入示例
Jul 23 #Python
Python 避免字典和元组的多重嵌套问题
Jul 15 #Python
Pytorch中expand()的使用(扩展某个维度)
Jul 15 #Python
You might like
php 不同编码下的字符串长度区分
2009/09/26 PHP
深入PHP FTP类的详解
2013/06/13 PHP
美图秀秀web开放平台--PHP流式上传和表单上传示例分享
2014/06/22 PHP
php验证码的制作思路和实现方法
2015/11/12 PHP
如何批量清理系统临时文件(语言:C#、 C/C++、 php 、python 、java )
2016/02/01 PHP
PHP之十六个魔术方法详细介绍
2016/11/01 PHP
php操作redis常见方法示例【key与value操作】
2020/04/14 PHP
提取jquery的ready()方法单独使用示例
2014/03/25 Javascript
异步安全加载javascript文件的方法
2015/07/21 Javascript
jQuery 如何给Carousel插件添加新的功能
2016/04/18 Javascript
javascript实现简易计算器的代码
2016/05/31 Javascript
简单实现js菜单栏切换效果
2017/03/04 Javascript
vue中element-ui表格缩略图悬浮放大功能的实例代码
2018/06/26 Javascript
通过封装scroll.js 获取滚动条的值
2018/07/13 Javascript
Vue组件中的data必须是一个function的原因浅析
2018/09/03 Javascript
CryptoJS中AES实现前后端通用加解密技术
2018/12/18 Javascript
jQuery实现简单评论区功能
2020/10/26 jQuery
[02:52]2014DOTA2西雅图国际邀请赛 CIS战队巡礼
2014/07/07 DOTA
通过数据库对Django进行删除字段和删除模型的操作
2015/07/21 Python
Python操作MySQL数据库的方法
2018/06/20 Python
使用python对excle和json互相转换的示例
2018/10/23 Python
python将控制台输出保存至文件的方法
2019/01/07 Python
python词云库wordcloud的使用方法与实例详解
2020/02/17 Python
Python openpyxl模块实现excel读写操作
2020/06/30 Python
浅谈keras中的keras.utils.to_categorical用法
2020/07/02 Python
细说CSS3中box属性中的overflow-x属性和overflow-y属性值的效果
2014/07/21 HTML / CSS
波兰在线运动商店:YesSport
2020/07/23 全球购物
德国户外商店:eXXpozed
2020/07/25 全球购物
淘宝客服自我总结鉴定
2014/01/25 职场文书
作文批改评语大全
2014/04/23 职场文书
申论倡议书范文
2014/05/13 职场文书
2014年学生资助工作总结
2014/12/18 职场文书
父亲节寄语大全
2015/02/27 职场文书
初中教务主任竞聘演讲稿(范文)
2019/08/20 职场文书
Python OpenGL基本配置方式
2022/05/20 Python
PostgreSQL怎么创建分区表详解
2022/06/25 PostgreSQL