基于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写的一个wordpress的采集程序
Feb 27 Python
python matplotlib 注释文本箭头简单代码示例
Jan 08 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
May 07 Python
Python 字符串转换为整形和浮点类型的方法
Jul 17 Python
Python设计模式之迭代器模式原理与用法实例分析
Jan 10 Python
Python实现查找数组中任意第k大的数字算法示例
Jan 23 Python
通过字符串导入 Python 模块的方法详解
Oct 27 Python
python 实现Flask中返回图片流给前端展示
Jan 09 Python
Python开发之基于模板匹配的信用卡数字识别功能
Jan 13 Python
Python图像处理库PIL的ImageGrab模块介绍详解
Feb 26 Python
pygame实现弹球游戏
Apr 14 Python
Python实现日志实时监测的示例详解
Apr 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
星际争霸 Starcraft 编年史
2020/03/14 星际争霸
pw的一个放后门的方法分析
2007/10/08 PHP
PHP 配置文件中open_basedir选项作用
2009/07/19 PHP
详解WordPress中添加和执行动作的函数使用方法
2015/12/29 PHP
PHP Ajax JavaScript Json获取天气信息实现代码
2016/08/17 PHP
Laravel 实现添加多语言提示信息
2019/10/25 PHP
Aster vs Newbee BO5 第二场2.19
2021/03/10 DOTA
IE浏览器兼容Firefox的JS脚本的代码
2008/10/23 Javascript
HTTP 304错误的详细讲解
2013/11/13 Javascript
javascript if条件判断方法小结
2014/05/17 Javascript
js进行表单验证实例分析
2015/02/10 Javascript
jQuery技巧之让任何组件都支持类似DOM的事件管理
2016/04/05 Javascript
js中用cssText设置css样式的简单方法
2016/09/19 Javascript
微信小程序 window_x64环境搭建
2016/09/30 Javascript
layui导航栏实现代码
2017/05/19 Javascript
javascript将url解析为json格式的两种方法
2017/08/18 Javascript
vue的一个分页组件的示例代码
2017/12/25 Javascript
js array数组对象操作方法汇总
2019/03/18 Javascript
微信小程序换肤功能实现代码(思路详解)
2020/08/25 Javascript
vue-cli3项目打包后自动化部署到服务器的方法
2020/09/16 Javascript
[57:31]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第一场 2月1日
2021/03/11 DOTA
python分块读取大数据,避免内存不足的方法
2018/12/10 Python
Scrapy 配置动态代理IP的实现
2020/09/28 Python
Python 实现进度条的六种方式
2021/01/06 Python
解决pycharm 格式报错tabs和space不一致问题
2021/02/26 Python
Wiggle新西兰:自行车、跑步、游泳
2020/05/06 全球购物
Tomcat中怎么使用log4j输出所有的log
2016/07/07 面试题
初中生自我鉴定
2014/02/04 职场文书
学雷锋志愿服务月活动总结
2014/03/09 职场文书
董事长助理工作职责
2014/06/08 职场文书
高中生国庆节演讲稿范文2014
2014/09/21 职场文书
2014年社区宣传工作总结
2014/12/02 职场文书
幼儿园教师节感谢信
2015/01/23 职场文书
浅谈JS的原型和原型链
2021/06/04 Javascript
Python深度学习之实现卷积神经网络
2021/06/05 Python
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python