基于Python socket的端口扫描程序实例代码

本文研究的主要是Python的端口扫描程序,具体实例代码如下。

先来看看第一个端口扫描程序代码,获取本机的IP和端口号:

import socket 

def get_my_ip():
 try:
  csock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  csock.connect(('8.8.8.8', 80))
  (addr, port) = csock.getsockname()
  csock.close()
  return addr,port
 except socket.error:
  return "127.0.0.1" 

def int_to_ip(int_ip):
 return socket.inet_ntoa(struct.pack('I', socket.htonl(int_ip))) 

def ip_to_int(ip):
 return socket.ntohl(struct.unpack("I", socket.inet_aton(str(ip)))[0]) 

(ip,port)=get_my_ip()
print "ip=%s port=%d" %(ip,port) 

PortScan.py

#!/usr/bin/python
# -*- coding: utf-8 -*- 

import optparse
from socket import *
from threading import * 

screenLock = Semaphore(value=1) 

def connScan(tgtHost, tgtPort):
 try:
  connSkt = socket(AF_INET, SOCK_STREAM)
  connSkt.connect((tgtHost, tgtPort))
  connSkt.send('ViolentPython\r\n')
  results = connSkt.recv(100)
  screenLock.acquire()
  print '[+] %d/tcp open' % tgtPort
  print '[+] ' + str(results)
 except:
  screenLock.acquire()
  print '[-] %d/tcp closed' % tgtPort
 finally:
 screenLock.release()
 connSkt.close() 

def portScan(tgtHost, tgtPorts):
 try:
  tgtIP = gethostbyname(tgtHost)
 except:
  print "[-] Cannot resolve '%s': Unknown host" %tgtHost
  return 

 try:
  tgtName = gethostbyaddr(tgtIP)
  print '\n[+] Scan Results for: ' + tgtName[0]
 except:
  print '\n[+] Scan Results for: ' + tgtIP 

 setdefaulttimeout(1)
 for tgtPort in tgtPorts:
  t = Thread(target=connScan,args=(tgtHost,int(tgtPort)))
  t.start() 

def main():
 parser = optparse.OptionParser('usage %prog '+\
  '-H <target host> -p <target port>')
 parser.add_option('-H', dest='tgtHost', type='string',\
  help='specify target host')
 parser.add_option('-p', dest='tgtPort', type='string',\
  help='specify target port[s] separated by comma') 

 (options, args) = parser.parse_args() 

 tgtHost = options.tgtHost
 tgtPorts = str(options.tgtPort).split(',') 

 if (tgtHost == None) | (tgtPorts[0] == None):
 print parser.usage
  exit(0) 

 portScan(tgtHost, tgtPorts) 

if __name__ == '__main__':
 main() 

基于Python socket的端口扫描程序

#-------------------------------------------------------------------------------
# Name:  PortScan
# Purpose:  扫描网段主机的端口开放情况
# Author:  Hao Chen
# Python3.4
#-------------------------------------------------------------------------------
import socket
def main():
 ip_start=input('请输入开始IP:(默认:127.0.0.1)')
 if ip_start=='':
  ip_start='127.0.0.1'
  ip_end='127.0.0.1'
 else:
  ip_end=input('请输入结束IP:')
  if ip_end=='':
   ip_end='127.0.0.1' 

 s=input('请输入目标主机开始端口:(默认扫描常用端口)')
 if s=='':
  portList=[21, 22, 23, 25, 80, 135, 137, 139, 445, 1433, 1502, 3306, 3389, 8080, 9015]
 else:
  startport=int(s)
  s=input('请输入目标主机结束端口:(默认:65535)')
  if s=='':
   endport=65535
  else:
   endport=int(s)
  portList=[i for i in range(startport,endport+1)] 

 while 1:
  #ip_start<ip_end
  x1=ip_start.rfind('.');
  x2=ip_end.rfind('.')
  if int(ip_start[x1+1:])>int(ip_end[x2+1:]):
   break; 

  #开始扫描端口
  for port in portList:
   print('正在扫描%s :%d' %(ip_start,port))
   try:
    sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sk.settimeout(10)
    sk.connect((ip_start,port))
    sk.settimeout(None)
    print('Server %s port %d OK!' % (ip_start,port))
    sk.close() 

    #结果保存在文件中
    f=open("IP_Port.txt",'a')
    f.write(ip_start+' : '+str(port)+'\n')
    f.close()
   except Exception:
    print('Server %s port %d is not connected!' % (ip_start,port)) 

  #更新ip_start
  i=ip_start.rfind('.')
  x=int(ip_start[i+1:])+1
  ip_start=ip_start[:i+1]+str(x) 

 print('扫描完成,结果保存在IP_Port.txt文件中') 

if __name__ == '__main__':
 main() 

总结

以上就是本文关于基于Python socket的端口扫描程序实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

您可能感兴趣的文章:

  • Python实现的多线程端口扫描工具分享
  • 使用Python编写简单的端口扫描器的实例分享
  • python基础教程之udp端口扫描
  • Python端口扫描简单程序
  • python端口扫描系统实现方法
  • 实例探究Python以并发方式编写高性能端口扫描器的方法
  • 使用Python3制作TCP端口扫描器
  • Python实现简易端口扫描器代码实例
  • python实现的多线程端口扫描功能示例
  • Python实现的端口扫描功能示例
(0)

相关推荐

  • Python实现的多线程端口扫描工具分享

    昨晚今晚写了两晚,总算把Py Port Scanner 写完了,姑且称之为0.1版本,算是一个Python多线程端口扫描工具. 水平有限,实话中间有一些困惑和不解的地方,代码可能也写的比较乱.有些问题并未找到很好的解决方法,还望大家谅解.速度大家自己试验,我感觉还行. 送上效果图两份,分别是扫单IP和扫IP段: 源码: 复制代码 代码如下: # -*- coding: utf-8 -*- __author__ = 'Phtih0n' import threading, socket, sys,

  • 实例探究Python以并发方式编写高性能端口扫描器的方法

    关于端口扫描器 端口扫描工具(Port Scanner)指用于探测服务器或主机开放端口情况的工具.常被计算机管理员用于确认安全策略,同时被攻击者用于识别目标主机上的可运作的网络服务. 端口扫描定义是客户端向一定范围的服务器端口发送对应请求,以此确认可使用的端口.虽然其本身并不是恶意的网络活动,但也是网络攻击者探测目标主机服务,以利用该服务的已知漏洞的重要手段.端口扫描的主要用途仍然只是确认远程机器某个服务的可用性. 扫描多个主机以获取特定的某个端口被称为端口清扫(Portsweep),以此获取特

  • python端口扫描系统实现方法

    本文实例讲述了python端口扫描系统实现方法.分享给大家供大家参考.具体实现方法如下: 该程序的主要功能如下: 1. 从自有API接口获取所有的外网IP段: 2. 用Nmap 遍历扫描所有的IP段,-oX 生成XML的扫描报告: 3. 用xml.etree.ElementTree模块方法读取XML文件,将ip,开放端口,对应服务等写入Mysql数据库. 功能很简单,没有满足老大高大上的需求,所以这个小项目就这么英勇的挂掉了!~~~完全都还没考虑程序异常终止,扫描服务器异常歇菜的情况. 贴上代码

  • Python实现的端口扫描功能示例

    本文实例讲述了Python实现的端口扫描功能.分享给大家供大家参考,具体如下: 一 代码 import sys import socket import multiprocessing def ports(ports_service): #获取常用端口对应的服务名称 for port in list(range(1,100))+[143,145,113,443,445,3389, 8080]: try: ports_service[port] = socket.getservbyport(por

  • python基础教程之udp端口扫描

    一.概述任务描述:开发一个程序,用于获取局域网中开启snmp服务的主机ip地址列表,并写入相应文件以便其它程序使用.背景知识:SNMP是基于UDP的,而且标准的SNMP服务使用161和162端口.思路:1.获取局域在线主机列表:2.获取各个主机的snmp端口(比如161)开启状况:3.以特定格式写入特定文件.这里只实现前两步. 二.nmap实现1.安装nmapLinux平台(CentOS为例): yum install nmap -y     widows平台(下载地址):http://nmap

  • 使用Python编写简单的端口扫描器的实例分享

    单线程实现 单线程实现道理比较简单,这里尝试Soket连接3389,连接成功说明端口开放,否则说明没有开远程服务.随便修改了一下就ok了,代码如下,最终得到自己的IP地址. #!/usr/bin/env python import socket if __name__=='__main__': port=3389 s=socket.socket() for cnt in range(253,2,-1): address='XXX.XXX.XXX.'+str(cnt) #XXX.XXX.XXX I

  • 使用Python3制作TCP端口扫描器

    在渗透测试的初步阶段通常我们都需要对攻击目标进行信息搜集,而端口扫描就是信息搜集中至关重要的一个步骤.通过端口扫描我们可以了解到目标主机都开放了哪些服务,甚至能根据服务猜测可能存在某些漏洞. TCP端口扫描一般分为以下几种类型: TCP connect扫描:也称为全连接扫描,这种方式直接连接到目标端口,完成了TCP三次握手的过程,这种方式扫描结果比较准确,但速度比较慢而且可轻易被目标系统检测到. TCP SYN扫描:也称为半开放扫描,这种方式将发送一个SYN包,启动一个TCP会话,并等待目标响应

  • Python实现简易端口扫描器代码实例

    在网上的一些资料的基础上自己又添了些新内容,算是Python socket编程练手吧. #coding=utf-8 import socket import time import sys import struct import threading from threading import Thread,activeCount results=[] def portScanner(ip,port): server = (ip,port) sockfd = socket.socket(sock

  • Python端口扫描简单程序

    本文实例为大家分享了Python端口扫描的实现代码,供大家参考,具体内容如下 获取本机的IP和端口号: import socket def get_my_ip(): try: csock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) csock.connect(('8.8.8.8', 80)) (addr, port) = csock.getsockname() csock.close() return addr,port except s

  • python实现的多线程端口扫描功能示例

    本文实例讲述了python实现的多线程端口扫描功能.分享给大家供大家参考,具体如下: 下面的程序给出了对给定的ip主机进行多线程扫描的Python代码 #!/usr/bin/env python #encoding: utf-8 import socket, sys, thread, time openPortNum = 0 socket.setdefaulttimeout(3) def usage(): print '''''Usage: Scan the port of one IP: py

随机推荐