pyqt IP段端口扫描工具

/ 0评 / 0

STCP.py

 

[php]
# -*- coding: utf-8 -*-
from PyQt4 import QtCore, QtGui
import sys
import socket
import threading,time
socket.setdefaulttimeout(10) #设置了全局默认超时时间
import thread
import ini
import time #获取时间和延时
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s

class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName(_fromUtf8("Form"))
Form.resize(272, 482)
self.textEdit = QtGui.QTextEdit(Form)
self.textEdit.setGeometry(QtCore.QRect(60, 10, 201, 31))
self.textEdit.setObjectName(_fromUtf8("textEdit"))
self.textEdit_2 = QtGui.QTextEdit(Form)
self.textEdit_2.setGeometry(QtCore.QRect(60, 50, 201, 31))
self.textEdit_2.setObjectName(_fromUtf8("textEdit_2"))
self.textEdit_3 = QtGui.QTextEdit(Form)
self.textEdit_3.setGeometry(QtCore.QRect(60, 90, 81, 31))
self.textEdit_3.setObjectName(_fromUtf8("textEdit_3"))
self.label = QtGui.QLabel(Form)
self.label.setGeometry(QtCore.QRect(10, 30, 54, 12))
self.label.setObjectName(_fromUtf8("label"))
self.label_2 = QtGui.QLabel(Form)
self.label_2.setGeometry(QtCore.QRect(10, 70, 54, 12))
self.label_2.setObjectName(_fromUtf8("label_2"))
self.label_3 = QtGui.QLabel(Form)
self.label_3.setGeometry(QtCore.QRect(20, 110, 54, 12))
self.label_3.setObjectName(_fromUtf8("label_3"))
self.pushButton = QtGui.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(160, 90, 101, 31))
self.pushButton.setObjectName(_fromUtf8("pushButton"))
#self.pushButton.clicked.connect(self.mess)
self.textEdit_4 = QtGui.QTextEdit(Form)
self.textEdit_4.setGeometry(QtCore.QRect(10, 150, 251, 321))
self.textEdit_4.setObjectName(_fromUtf8("textEdit_4"))
self.label_4 = QtGui.QLabel(Form)
self.label_4.setGeometry(QtCore.QRect(70, 130, 251, 25))
self.label_4.setObjectName(_fromUtf8("label_4"))

self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)

QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.test)
def test(self):
thread.start_new_thread(self.mess, ())
def mess(self):
#self.label_4.setText(u"正在扫描:")
#QtGui.QMessageBox.information(None, u"消息", u"消息提示")
# data=self.textEdit_2.toPlainText() #获取内容
# QtGui.QMessageBox.information(None, u"消息",data)
ip1=self.textEdit.toPlainText() #获取内容
ip2=self.textEdit_2.toPlainText() #获取内容
port=self.textEdit_3.toPlainText() #获取内容
ini.ini_write(ip1,ip2,port) #修改INI
# if ip1>=ip2:
# self.textEdit_4.append(u"开始IP大于结束IP请重新输入")
# QtGui.QMessageBox.information(None, u"消息", u"开始IP大于结束IP请重新输入")
# return 0

self.textEdit_4.append(u"扫描结果会保存在程序目录下ip.txt")
list_ip=self.gen_ip(self.ip2num(ip1),self.ip2num(ip2))
self.pushButton.setEnabled(0) #给按钮改成禁用
self.textEdit_4.append(u"需要扫描"+str(len(list_ip))+u"个IP")
I1 = 0 #得到list的第一个元素
ip=0
self.textEdit_4.append(u"开始扫描IP--"+time.strftime('%Y.%m.%d-%H.%M.%S'))

while I1 < len(list_ip):
if ip>=200:
ini.ini_write(list_ip[I1],ini.IP2,port) #修改INI
ip=0
print list_ip[I1]
ip = ip + 1
#self.textEdit_4.append(list_ip[I1])
time.sleep(0.1) #确保先运行Seeker中的方法
thread.start_new_thread(self.socket_port,(list_ip[I1],int(port)))
I1 = I1 + 1 #一层
self.textEdit_4.append(u"IP扫描完成--"+time.strftime('%Y.%m.%d-%H.%M.%S'))
self.pushButton.setEnabled(1) #给按钮改成可用

def socket_port(self,ip,PORT):
try:
self.label_4.setText(U"正在扫描IP:"+str(ip)+u":"+str(PORT))
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ip,PORT))
#print ip,u":",PORT,u"端口开放"
self.textEdit_4.append(str(ip)+u":"+str(PORT)+u"端口开放")
xxx=file('ip.txt','w')
xxx.write(str(ip))
xxx.write('\n')
xxx.close()
except:
print ip,u":",PORT,u"端口未开放"
#self.textEdit_4.append(ip)
#----------------------------------------------------------------
def ip2num(self,ip):
ip = [int(x) for x in ip.split('.')]
return ip[0]<<24 | ip[1]<<16 | ip[2]<<8 | ip[3]

def num2ip(self,num):
if num>=IPend:
self.textEdit_4.append(u"IP导入数组完成")
return '%s.%s.%s.%s' % ( (num & 0xff000000) >> 24,
(num & 0x00ff0000) >> 16,
(num & 0x0000ff00) >> 8,
num & 0x000000ff )

def gen_ip(self,Aip1,Aip2): #返回数组
global IPend
IPend=Aip2
return [self.num2ip(num) for num in range(Aip1,Aip2+1) if num & 0xff]
#----------------------------------------------------------------
def iniA(self):
ini.ini_get() #读取INI
self.textEdit.setPlainText(ini.IP1)
self.textEdit_2.setPlainText(ini.IP2)
self.textEdit_3.setPlainText(ini.port)

def retranslateUi(self, Form):
Form.setWindowTitle(QtGui.QApplication.translate("Form", "QQ316118740", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("Form", "开始IP:", None, QtGui.QApplication.UnicodeUTF8))
self.label_2.setText(QtGui.QApplication.translate("Form", "结束IP:", None, QtGui.QApplication.UnicodeUTF8))
self.label_3.setText(QtGui.QApplication.translate("Form", "端口:", None, QtGui.QApplication.UnicodeUTF8))
self.pushButton.setText(QtGui.QApplication.translate("Form", "开始扫描", None, QtGui.QApplication.UnicodeUTF8))
self.label_4.setText(QtGui.QApplication.translate("Form", "扫描结果--pyqt端口扫描器", None, QtGui.QApplication.UnicodeUTF8))

class Start(QtGui.QMainWindow):
def __init__(self,parent=None):
QtGui.QWidget.__init__(self,parent)
self.ui=Ui_Form()#这儿跟上面那个class一样
self.ui.setupUi(self)
self.ui.iniA()

if __name__=="__main__":
app=QtGui.QApplication(sys.argv)
myapp=Start()
myapp.show()
sys.exit(app.exec_())
[/php]

ini.py

[php]
#!/usr/local/bin/python
#-*- coding: UTF-8 -*-
##################################################
#qq:316118740
#BLOG:http://hi.baidu.com/alalmn
# Python 操作ini文件
#  刚学写的不好请大家见谅
##################################################
IP1=""  #扫描IP
IP2=""   #当前已经扫到的IP
port=""  #扫描端口
INITXT="IP.ini"  #INI文件名字

import ConfigParser
def ini_get():  #读取INI
    try:
        global IP1
        global IP2
        global port
        global INITXT
        config = ConfigParser.ConfigParser()
        config.readfp(open(INITXT))
        IP1 = config.get("ipdata","ip1")
        IP2 = config.get("ipdata","ip2")
        port = config.get("ipdata","port")
    except:
        print "读取INI错误"
        ini_add("","","")  #写入INI

def ini_add(ip1,ip2,pt):  #写入INI
    try:
        global INITXT
        config = ConfigParser.ConfigParser()
        config.add_section("ipdata")# 设置section段及对应的值
        config.set("ipdata","ip1",ip1)
        config.set("ipdata","ip2",ip2)
        config.set("ipdata","port",pt)
        config.write(open(INITXT, "w"))# 写入文件
    except:
       print "写入INI错误"

def ini_write(ip1,ip2,pt):  #修改INI
    try:
        global INITXT
        config = ConfigParser.ConfigParser()
        config.read(INITXT)
        if not config.has_section("ipdata"):#看是否存在该Section,不存在则创建
            temp = config.add_section("")
        config.set("ipdata","ip1",ip1)
        config.set("ipdata","ip2",ip2)
        config.set("ipdata","port",pt)
        config.write(open(INITXT, "r+"))
    except:
        print "修改INI错误"
        ini_add("","")  #写入INI

#if __name__=='__main__':
##    ini_get()  #读取INI
##    print IP1
##    print IP2
#
##    ini_add("222222222","3333333333333")  #写入INI
##    ini_get()  #读取INI
##    print IP1
##    print IP2
#
#    ini_write("999999999","0000000000")  #修改INI
#    ini_get()  #读取INI
#    print IP1
#    print IP2
[/php]

发表评论

电子邮件地址不会被公开。 必填项已用*标注