基于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中的随机函数random的用法示例
Jan 27 Python
Python抽象和自定义类定义与用法示例
Aug 23 Python
python实现反转部分单向链表
Sep 27 Python
Python2和Python3中urllib库中urlencode的使用注意事项
Nov 26 Python
解决django前后端分离csrf验证的问题
Feb 03 Python
python进程池实现的多进程文件夹copy器完整示例
Nov 27 Python
关于Python3 lambda函数的深入浅出
Nov 27 Python
python3连接mysql获取ansible动态inventory脚本
Jan 19 Python
Django实现将views.py中的数据传递到前端html页面,并展示
Mar 16 Python
浅谈keras中自定义二分类任务评价指标metrics的方法以及代码
Jun 11 Python
Python数据分析库pandas高级接口dt的使用详解
Dec 11 Python
Python采集爬取京东商品信息和评论并存入MySQL
Apr 12 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
WINXP下apache+php4+mysql
2006/11/25 PHP
PHP教程 预定义变量
2009/10/23 PHP
一道求$b相对于$a的相对路径的php代码
2010/08/08 PHP
PHP学习之字符串比较和查找
2011/04/17 PHP
PHP 第二节 数据类型之字符串类型
2012/04/28 PHP
php socket实现的聊天室代码分享
2014/08/16 PHP
php实现的Captcha验证码类实例
2014/09/22 PHP
php 时间time与日期date之间的使用详解及区别
2016/11/07 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
2017/03/15 PHP
jQuery动态添加、删除元素的方法
2014/01/09 Javascript
使用js实现一个可编辑的select下拉列表
2014/02/20 Javascript
JS控制表单提交的方法
2015/07/09 Javascript
直接拿来用的页面跳转进度条JS实现
2016/01/06 Javascript
详解jquery选择器的原理
2017/08/01 jQuery
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
浅谈webpack SplitChunksPlugin实用指南
2018/09/17 Javascript
jquery实现联想词搜索框和搜索结果分页的示例
2018/10/10 jQuery
Node.JS在命令行中检查Chrome浏览器是否安装并打开指定网址
2019/05/21 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
基于NodeJS开发钉钉回调接口实现AES-CBC加解密
2020/08/20 NodeJs
vue 实现图片懒加载功能
2020/12/31 Vue.js
用Python的Tornado框架结合memcached页面改善博客性能
2015/04/24 Python
在ironpython中利用装饰器执行SQL操作的例子
2015/05/02 Python
python查看微信好友是否删除自己
2016/12/19 Python
python3.5基于TCP实现文件传输
2020/03/20 Python
Python设计模式之组合模式原理与用法实例分析
2019/01/11 Python
在Python中os.fork()产生子进程的例子
2019/08/08 Python
python中property属性的介绍及其应用详解
2019/08/29 Python
python绘图模块之利用turtle画图
2021/02/12 Python
环境科学专业大学生自荐信格式
2013/09/21 职场文书
机电专业毕业生自我鉴定2014
2014/10/04 职场文书
房屋产权证明书
2014/10/15 职场文书
高三英语复习计划
2015/01/19 职场文书
python如何利用cv2模块读取显示保存图片
2021/06/04 Python
Java框架入门之简单介绍SpringBoot框架
2021/06/18 Java/Android
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
2022/04/06 Python