基于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调用新浪微博API项目实践
Jul 28 Python
Python中字符串的常见操作技巧总结
Jul 28 Python
Python图片裁剪实例代码(如头像裁剪)
Jun 21 Python
python对日志进行处理的实例代码
Oct 06 Python
解决PySide+Python子线程更新UI线程的问题
Jan 11 Python
Django CBV类的用法详解
Jul 26 Python
使用Python项目生成所有依赖包的清单方式
Jul 13 Python
Python3爬虫中识别图形验证码的实例讲解
Jul 30 Python
Python confluent kafka客户端配置kerberos认证流程详解
Oct 12 Python
Python进行特征提取的示例代码
Oct 15 Python
基于Python组装jmx并调用JMeter实现压力测试
Nov 03 Python
关于python pygame游戏进行声音添加的技巧
Oct 24 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 检查扩展库或函数是否可用的代码
2010/04/06 PHP
php中用于检测一个地理IP地址是否可用的代码
2012/02/19 PHP
jQuery文件上传插件Uploadify使用指南
2014/06/05 Javascript
js读写json文件实例代码
2014/10/21 Javascript
node.js中的fs.readSync方法使用说明
2014/12/17 Javascript
jQuery实现简单二级下拉菜单
2015/04/12 Javascript
Jquery注册事件实现方法
2015/05/18 Javascript
JavaScript实现带标题的图片轮播特效
2015/05/20 Javascript
jQuery事件绑定用法详解(附bind和live的区别)
2016/01/19 Javascript
BootStrap文件上传样式超好看【持续更新】
2016/05/10 Javascript
详解js中的apply与call的用法
2016/07/30 Javascript
Nuxt 项目性能优化调研分析
2020/11/07 Javascript
python正则表达式判断字符串是否是全部小写示例
2013/12/25 Python
python通过pil为png图片填充上背景颜色的方法
2015/03/17 Python
Python的Django框架中消息通知的计数器实现教程
2016/06/13 Python
django批量导入xml数据
2016/10/16 Python
Python正则表达式教程之一:基础篇
2017/03/02 Python
python读取excel表格生成erlang数据
2017/08/26 Python
Tensorflow实现卷积神经网络的详细代码
2018/05/24 Python
使用Python3内置文档高效学习以及官方中文文档
2019/05/19 Python
python celery分布式任务队列的使用详解
2019/07/08 Python
python实现桌面托盘气泡提示
2019/07/29 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
2019/10/24 Python
Python 批量读取文件中指定字符的实现
2020/03/06 Python
Android Q之气泡弹窗的实现示例
2020/06/23 Python
Python如何实现线程间通信
2020/07/30 Python
Kate Spade美国官网:纽约新兴时尚品牌,以包包闻名于世
2017/11/09 全球购物
Book Depository澳大利亚:世界领先的专业在线书店之一
2018/12/27 全球购物
Antler英国官网:购买安特丽行李箱、拉杆箱
2019/08/25 全球购物
购房意向书范本
2014/04/01 职场文书
医疗纠纷协议书
2014/04/16 职场文书
安全生产演讲稿
2014/05/09 职场文书
校友会致辞
2015/07/30 职场文书
公司员工管理制度
2015/08/04 职场文书
小学生教师节广播稿
2015/08/19 职场文书
2016年共产党员公开承诺书
2016/03/24 职场文书