基于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中的对象拷贝示例 python引用传递
Jan 23 Python
利用Python开发实现简单的记事本
Nov 15 Python
Python之Scrapy爬虫框架安装及简单使用详解
Dec 22 Python
python版学生管理系统
Jan 10 Python
对TensorFlow的assign赋值用法详解
Jul 30 Python
在PyCharm中批量查找及替换的方法
Jan 20 Python
Django框架表单操作实例分析
Nov 04 Python
Pytorch之contiguous的用法
Dec 31 Python
Python Sphinx使用实例及问题解决
Jan 17 Python
pytorch 中的重要模块化接口nn.Module的使用
Apr 02 Python
Keras自定义IOU方式
Jun 10 Python
python time()的实例用法
Nov 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中serialize序列化与json性能测试的示例分析
2013/04/27 PHP
CodeIgniter安全相关设置汇总
2014/07/03 PHP
PHP大批量插入数据库的3种方法和速度对比
2014/07/08 PHP
PHP导出Excel实例讲解
2016/01/24 PHP
php及codeigniter使用session-cookie的方法(详解)
2017/04/06 PHP
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
jquery.ui.draggable中文文档
2009/11/24 Javascript
javascript + jquery实现定时修改文章标题
2014/03/19 Javascript
深入理解javascript作用域第二篇之词法作用域和动态作用域
2016/07/24 Javascript
JavaScript动态检验密码强度的实现方法
2016/11/09 Javascript
footer定位页面底部(代码分享)
2017/03/07 Javascript
微信小程序 template模板详解及实例代码
2017/03/09 Javascript
JS中关于正则的巧妙操作
2017/08/31 Javascript
JavaScript EventEmitter 背后的秘密 完整版
2018/03/29 Javascript
关于Vue组件库开发详析
2018/07/01 Javascript
jquery获取img的src值实例介绍
2019/01/16 jQuery
JavaScript类型相关的常用操作总结
2019/02/14 Javascript
[01:14:41]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第一场 1月8日
2021/03/11 DOTA
python批量导出导入MySQL用户的方法
2013/11/15 Python
Python通过解析网页实现看报程序的方法
2014/08/04 Python
python  Django中的apps.py的目的是什么
2018/10/15 Python
python中for循环输出列表索引与对应的值方法
2018/11/07 Python
python中执行smtplib失败的处理方法
2020/07/01 Python
浅谈Django前端后端值传递问题
2020/07/15 Python
微软中国官方旗舰店:销售Surface、Xbox One、笔记本电脑、Office
2018/07/23 全球购物
西班牙Polo衫品牌:Polo Club
2020/08/09 全球购物
Linux不知道文件后缀名怎么判断文件类型
2014/08/21 面试题
事业单位个人应聘自荐信
2013/09/21 职场文书
法律进机关实施方案
2014/03/12 职场文书
人事经理岗位职责
2014/04/28 职场文书
我的中国梦演讲稿500字
2014/08/19 职场文书
爱护公共设施倡议书
2014/08/29 职场文书
法律服务所工作总结
2015/08/10 职场文书
nginx搭建NFS网络文件系统
2022/04/14 Servers
MySQL sql模式设置引起的问题
2022/05/15 MySQL
SpringBoot详解整合Redis缓存方法
2022/07/15 Java/Android