基于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实现网页链接提取的方法分享
Feb 25 Python
Python中分数的相关使用教程
Mar 30 Python
Python即时网络爬虫项目启动说明详解
Feb 23 Python
Python中按键来获取指定的值
Mar 02 Python
Python udp网络程序实现发送、接收数据功能示例
Dec 09 Python
python如何使用socketserver模块实现并发聊天
Dec 14 Python
pytorch 实现在预训练模型的 input上增减通道
Jan 06 Python
Python迭代器Iterable判断方法解析
Mar 16 Python
Python Tornado之跨域请求与Options请求方式
Mar 28 Python
Python退出时强制运行一段代码的实现方法
Apr 29 Python
20行代码教你用python给证件照换底色的方法示例
Feb 05 Python
Python实现拼音转换
Jun 07 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
浅析is_writable的php实现
2013/06/18 PHP
那些年,我还在学习jquery 学习笔记
2012/03/05 Javascript
js如何实现设计模式中的模板方法
2013/07/23 Javascript
js判断上传文件的类型和大小示例代码
2013/10/18 Javascript
分享十五款 jQuery 社交网络分享插件
2015/05/16 Javascript
JavaScript运动减速效果实例分析
2015/08/04 Javascript
javascript 解决浏览器不支持的问题
2016/09/24 Javascript
js利用appendChild对标签进行排序的实现方法
2016/10/16 Javascript
JQuery.validationEngine表单验证插件(推荐)
2016/12/10 Javascript
H5+C3+JS实现双人对战五子棋游戏(UI篇)
2020/05/28 Javascript
微信小程序实现卡片层叠滑动效果
2019/06/21 Javascript
vue实现百度搜索功能
2020/12/28 Javascript
JavaScript Tab菜单实现过程解析
2020/05/13 Javascript
[02:30]DOTA2英雄基础教程 暗影恶魔
2013/12/17 DOTA
使用Python脚本在Linux下实现部分Bash Shell的教程
2015/04/17 Python
Python中生成器和yield语句的用法详解
2015/04/17 Python
在Python的Flask框架中使用日期和时间的教程
2015/04/21 Python
详解C++编程中一元运算符的重载
2016/01/19 Python
深入理解Python单元测试unittest的使用示例
2017/11/18 Python
Python微医挂号网医生数据抓取
2019/01/24 Python
Python实现线性判别分析(LDA)的MATLAB方式
2019/12/09 Python
tensorflow使用指定gpu的方法
2020/02/04 Python
谈一谈数组拼接tf.concat()和np.concatenate()的区别
2020/02/07 Python
Python PyQt5整理介绍
2020/04/01 Python
解决python打开https出现certificate verify failed的问题
2020/09/03 Python
丝芙兰中国官方商城:SEPHORA中国
2018/01/10 全球购物
可爱的童装和鞋子:Fabkids
2019/08/16 全球购物
大学生活动总结模板
2014/07/02 职场文书
赵乐秦在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
晚会开幕词
2015/01/28 职场文书
写给老婆的保证书
2015/02/27 职场文书
陈斌强事迹观后感
2015/06/17 职场文书
建立共青团委员会的请示
2019/04/02 职场文书
PHP 对接美团大众点评团购券(门票)的开发步骤
2021/04/03 PHP
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis
react中useState使用:如何实现在当前表格直接更改数据
2022/08/05 Javascript