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

作者:mb62d3c286f15ed??????? 时间:2021-05-10 15:16:54 

前言:

一个用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

来源:https://blog.51cto.com/csnd/5501436

标签:Python,端口,扫描器,socket,nmap
0
投稿

猜你喜欢

  • 情感的容器 被寄托了的QQ2010视觉设计

    2010-02-03 14:51:00
  • pyqt5 从本地选择图片 并显示在label上的实例

    2022-12-12 17:48:04
  • python2.7读取文件夹下所有文件名称及内容的方法

    2023-12-16 03:27:07
  • 基于python实现查询ip地址来源

    2021-02-10 14:45:52
  • Firefox扩展工具:Firebug调试经验与技巧

    2008-10-31 13:16:00
  • 七个生态系统核心库[python自学收藏]

    2021-09-17 03:51:12
  • Python中__init__.py文件的作用详解

    2021-12-22 13:04:05
  • 如何在ASP里面创建GUID

    2008-01-08 19:13:00
  • python 计算数组中每个数字出现多少次--“Bucket”桶的思想

    2023-06-28 19:37:55
  • 关于ASP中脚本执行顺序的讲解

    2008-11-04 12:02:00
  • 名片管理系统python版

    2021-08-06 01:50:15
  • 详解python的集合set的函数

    2023-02-06 04:16:42
  • Python的argparse库使用详解

    2023-06-13 11:27:36
  • Python基于opencv的图像压缩算法实例分析

    2022-09-29 11:20:41
  • python中itertools模块使用小结

    2023-08-07 18:44:32
  • Python Playwright 文本框操作技巧

    2023-01-15 20:59:21
  • python读取json数据还原表格批量转换成html

    2023-11-19 05:46:20
  • Python实现图片滑动式验证识别方法

    2023-11-05 22:14:52
  • javascript 实现子父窗体互相传值的简单实例

    2023-08-09 09:52:52
  • 浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别

    2023-09-09 23:41:04
  • asp之家 网络编程 m.aspxhome.com