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


Posted in Python onFebruary 09, 2018

本文研究的主要是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对象体系深入分析
Oct 28 Python
python实现根据主机名字获得所有ip地址的方法
Jun 28 Python
Django中模版的子目录与include标签的使用方法
Jul 16 Python
轻松掌握python设计模式之访问者模式
Nov 18 Python
Python实现随机选择元素功能
Sep 14 Python
Python实现将一个正整数分解质因数的方法分析
Dec 14 Python
Python Requests模拟登录实现图书馆座位自动预约
Apr 27 Python
python实现飞机大战小游戏
Nov 08 Python
Django 解决新建表删除后无法重新创建等问题
May 21 Python
Ubuntu配置Pytorch on Graph (PoG)环境过程图解
Nov 19 Python
python基于openpyxl生成excel文件
Dec 23 Python
一文带你掌握Pyecharts地理数据可视化的方法
Feb 06 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
Feb 08 #Python
Tensorflow 利用tf.contrib.learn建立输入函数的方法
Feb 08 #Python
django数据库migrate失败的解决方法解析
Feb 08 #Python
python使用锁访问共享变量实例解析
Feb 08 #Python
Python异常对代码运行性能的影响实例解析
Feb 08 #Python
Python科学计算包numpy用法实例详解
Feb 08 #Python
Python多进程并发与多线程并发编程实例总结
Feb 08 #Python
You might like
PHP+SQL 注入攻击的技术实现以及预防办法
2010/12/29 PHP
PHP实现单例模式最安全的做法
2014/06/13 PHP
Sublime里直接运行PHP配置方法
2014/11/28 PHP
PHP构造函数与析构函数用法示例
2016/09/28 PHP
javascript实现的距离现在多长时间后的一个格式化的日期
2009/10/29 Javascript
替代window.event.srcElement效果的可兼容性的函数
2009/12/18 Javascript
Jquery阻止事件冒泡 event.stopPropagation
2011/12/11 Javascript
JS三级可折叠菜单实现方法
2016/02/29 Javascript
js实现精确到秒的倒计时效果
2016/05/29 Javascript
Three.js实现简单3D房间布局
2018/12/30 Javascript
js正则匹配多个全部数据问题
2019/12/20 Javascript
Vue简单实现原理详解
2020/05/07 Javascript
详解vue-router的Import异步加载模块问题的解决方案
2020/05/13 Javascript
[13:38]2015国际邀请赛中国战队出征仪式
2015/05/29 DOTA
Python调用命令行进度条的方法
2015/05/05 Python
Python字符和字符值(ASCII或Unicode码值)转换方法
2015/05/21 Python
Python中的深拷贝和浅拷贝详解
2015/06/03 Python
Python多进程并发与多线程并发编程实例总结
2018/02/08 Python
Sanic框架路由用法实例分析
2018/07/16 Python
python实现字典嵌套列表取值
2019/12/16 Python
python中的测试框架
2020/11/13 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
2020/11/24 Python
python解包概念及实例
2021/02/17 Python
css3实现图片遮罩效果鼠标hover以后出现文字
2013/11/05 HTML / CSS
html5使用Canvas绘图的使用方法
2017/11/21 HTML / CSS
html5 canvas简单封装一个echarts实现不了的饼图
2018/06/12 HTML / CSS
澳大利亚最大的网上油画销售画廊:Direct Art Australia
2018/04/15 全球购物
乌克兰网上服装店:Bolf.ua
2018/10/30 全球购物
Linux文件系统类型
2012/02/15 面试题
恶搞卫生巾广告词
2014/03/18 职场文书
临床护理求职信
2014/04/26 职场文书
关于拾金不昧的感谢信
2015/01/21 职场文书
2015年档案管理工作总结
2015/04/08 职场文书
入党积极分子半年考察意见
2015/06/02 职场文书
2016年公司“3.12”植树节活动总结
2016/03/16 职场文书
导游词之西递宏村
2019/12/10 职场文书