基于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 相关文章推荐
sqlalchemy对象转dict的示例
Apr 22 Python
零基础写python爬虫之爬虫框架Scrapy安装配置
Nov 06 Python
python使用MySQLdb访问mysql数据库的方法
Aug 03 Python
python xml.etree.ElementTree遍历xml所有节点实例详解
Dec 04 Python
Python基于Socket实现的简单聊天程序示例
Aug 05 Python
使用实现pandas读取csv文件指定的前几行
Apr 20 Python
Python 修改列表中的元素方法
Jun 26 Python
python面试题小结附答案实例代码
Apr 11 Python
python输入多行字符串的方法总结
Jul 02 Python
Python学习笔记之错误和异常及访问错误消息详解
Aug 08 Python
python 用opencv实现霍夫线变换
Nov 27 Python
浅谈python中的多态
Jun 15 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
wiki-shan写的php在线加密的解密程序
2008/09/07 PHP
PHP字符过滤函数去除字符串最后一个逗号(rtrim)
2013/03/26 PHP
php判断并删除空目录及空子目录的方法
2015/02/11 PHP
WordPress中给文章添加自定义字段及后台编辑功能区域
2015/12/19 PHP
PHP插件PHPMailer发送邮件功能
2017/02/28 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
BOOM vs RR BO5 第四场 2.14
2021/03/10 DOTA
javascript权威指南 学习笔记之null和undefined
2011/09/25 Javascript
jQuery控制图片的hover效果(smartRollover.js)
2012/03/18 Javascript
有关javascript的性能优化 (repaint和reflow)
2013/04/12 Javascript
JavaScript获取表单内所有元素值的方法
2015/04/02 Javascript
JavaScript 七大技巧(一)
2015/12/13 Javascript
jQuery webuploader分片上传大文件
2016/11/07 Javascript
详解JS几种变量交换方式以及性能分析对比
2016/11/25 Javascript
微信小程序wepy框架笔记小结
2018/08/08 Javascript
javascript实现图片轮播代码
2019/07/09 Javascript
windows实现npm和cnpm安装步骤
2019/10/24 Javascript
Python使用Socket(Https)Post登录百度的实现代码
2012/05/18 Python
让python在hadoop上跑起来
2016/01/27 Python
Python+Selenium自动化实现分页(pagination)处理
2017/03/31 Python
python接口自动化测试之接口数据依赖的实现方法
2019/04/26 Python
Python库skimage绘制二值图像代码实例
2020/04/10 Python
keras的siamese(孪生网络)实现案例
2020/06/12 Python
html5 localStorage本地存储_动力节点Java学院整理
2017/07/06 HTML / CSS
详解HTML5中div和section以及article的区别
2015/07/14 HTML / CSS
伊芙丽官方旗舰店:中国淑女一线品牌
2017/12/01 全球购物
linux下进程间通信的方式
2013/01/23 面试题
技术学校毕业生求职信分享
2013/12/02 职场文书
摄影助理岗位职责
2014/02/07 职场文书
诉讼财产保全担保书
2014/05/20 职场文书
2014校长四风问题对照检查材料思想汇报
2014/09/16 职场文书
卖房授权委托书样本
2014/10/05 职场文书
撤诉书怎么写
2015/05/19 职场文书
公司岗位说明书
2015/10/08 职场文书
Python实战之疫苗研发情况可视化
2021/05/18 Python
python缺失值填充方法示例代码
2022/12/24 Python