基于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中pygame模块用法实例
Oct 09 Python
详解Python的迭代器、生成器以及相关的itertools包
Apr 02 Python
python迭代器与生成器详解
Mar 10 Python
Python搭建HTTP服务器和FTP服务器
Mar 09 Python
Python3 处理JSON的实例详解
Oct 29 Python
Python global全局变量函数详解
Sep 18 Python
python多个模块py文件的数据共享实例
Jan 11 Python
Python中的asyncio代码详解
Jun 10 Python
django框架CSRF防护原理与用法分析
Jul 22 Python
python判断无向图环是否存在的示例
Nov 22 Python
python中@property的作用和getter setter的解释
Dec 22 Python
Python代码风格与编程习惯重要吗?
Jun 03 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中操作Excel实例代码
2010/04/29 PHP
几款极品的javascript压缩混淆工具
2007/05/16 Javascript
前淘宝前端开发工程师阿当的PPT中有JS技术理念问题
2010/01/15 Javascript
分享一个asp.net pager分页控件
2012/01/04 Javascript
html向js方法传递参数具体实现
2013/08/08 Javascript
javascript中的变量作用域以及变量提升详细介绍
2013/10/24 Javascript
javascript中的遍历for in 以及with的用法
2014/12/22 Javascript
jQuery插件MixItUp实现动画过滤和排序
2015/04/12 Javascript
JS+CSS实现的简单折叠展开多级菜单效果
2015/09/12 Javascript
JavaScript实现的select点菜功能示例
2017/01/16 Javascript
React学习之事件绑定的几种方法对比
2017/09/24 Javascript
webpack打包html里面img后src为“[object Module]”问题
2019/12/22 Javascript
JS面向对象之单选框实现
2020/01/17 Javascript
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
python中os和sys模块的区别与常用方法总结
2017/11/14 Python
Python实现生成随机数据插入mysql数据库的方法
2017/12/25 Python
Python中列表与元组的乘法操作示例
2018/02/10 Python
django 外键model的互相读取方法
2018/12/15 Python
pandas dataframe的合并实现(append, merge, concat)
2019/06/24 Python
Python通过Schema实现数据验证方式
2020/11/12 Python
基于css3仿造window7的开始菜单
2010/06/17 HTML / CSS
Html5实现首页动态视频背景的示例代码
2019/09/25 HTML / CSS
巴西家用小家电购物网站:Polishop
2016/08/07 全球购物
雅高酒店中国:Accorhotels.com China
2018/03/26 全球购物
电子狗项圈:eDog Australia
2019/12/04 全球购物
创业计划书的内容步骤和要领
2014/01/04 职场文书
二年级数学教学反思
2014/01/21 职场文书
工程项目建议书范文
2014/03/12 职场文书
募捐倡议书怎么写
2014/05/14 职场文书
擅自离岗检讨书
2014/09/12 职场文书
2015年音乐教学工作总结
2015/07/22 职场文书
《我的伯父鲁迅先生》教学反思
2016/02/16 职场文书
《乘法分配律》教学反思
2016/02/24 职场文书
先进党支部事迹材料2016
2016/02/26 职场文书
创业计划书之游泳馆
2019/09/16 职场文书
Linux、ubuntu系统下查看显卡型号、显卡信息详解
2022/04/07 Servers