基于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 15 Python
在Python编程过程中用单元测试法调试代码的介绍
Apr 02 Python
在Django的URLconf中进行函数导入的方法
Jul 18 Python
示例详解Python3 or Python2 两者之间的差异
Aug 23 Python
Python pyinotify模块实现对文档的实时监控功能方法
Oct 13 Python
Python3实现的判断环形链表算法示例
Mar 07 Python
python cumsum函数的具体使用
Jul 29 Python
Python计算机视觉里的IOU计算实例
Jan 17 Python
Django中的session用法详解
Mar 09 Python
Python如何批量获取文件夹的大小并保存
Mar 31 Python
sklearn的predict_proba使用说明
Jun 28 Python
解决pycharm修改代码后第一次运行不生效的问题
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实现验证码功能
2006/10/09 PHP
简单的页面缓冲技术
2006/10/09 PHP
php合并数组array_merge函数运算符加号与的区别
2008/10/31 PHP
PHP跨时区(UTC时间)应用解决方案
2013/01/11 PHP
PHP系统命令函数使用分析
2013/07/05 PHP
php curl post 时出现的问题解决
2014/01/30 PHP
PHP基本语法总结
2014/09/06 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
总结JavaScript设计模式编程中的享元模式使用
2016/05/21 Javascript
jQuery焦点图轮播插件KinSlideshow用法分析
2016/06/08 Javascript
Javascript 链式作用域详细介绍
2017/02/23 Javascript
nodejs中向HTTP响应传送进程的输出
2017/03/19 NodeJs
使用vue实现各类弹出框组件
2019/07/03 Javascript
python 控制语句
2011/11/03 Python
Python中__call__用法实例
2014/08/29 Python
python服务器端收发请求的实现代码
2014/09/29 Python
Python类的多重继承问题深入分析
2014/11/09 Python
python使用wxPython打开并播放wav文件的方法
2015/04/24 Python
Python中的time模块与datetime模块用法总结
2016/06/30 Python
实例详解Matlab 与 Python 的区别
2019/04/26 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
2020/09/09 Python
Pycharm的Available Packages为空的解决方法
2020/09/18 Python
python 基于PYMYSQL使用MYSQL数据库
2020/12/24 Python
详解CSS3中使用gradient实现渐变效果的方法
2015/08/18 HTML / CSS
HTML5 微格式和相关的属性名称
2010/02/10 HTML / CSS
lululemon美国官网:瑜伽服+跑步装备
2018/11/16 全球购物
Paradox London官方网站:英国新娘鞋婚礼鞋品牌
2019/08/29 全球购物
Jacques Lemans德国:奥地利钟表品牌
2019/12/26 全球购物
如何执行一个shell程序
2012/11/23 面试题
服务员自我评价
2014/01/25 职场文书
教师自荐信范文
2015/03/06 职场文书
简单的辞职信范文(2016最新版)
2015/05/12 职场文书
2016年3月份红领巾广播稿
2015/12/21 职场文书
MySql学习笔记之事务隔离级别详解
2021/05/12 MySQL
spring注解 @PropertySource配置数据源全流程
2022/03/25 Java/Android