2016-07-25 03:59:58

python 多线程 多进程 任务技巧

1、传统例子 在DDG https://duckduckgo.com/ 搜索“Python threading tutorial”关键字,结果基本上却都是相同的类+队列的示例。 标准线程多进程,生产者/消费者示例: #Example.py ''' Standard Producer/Consumer Threading Pattern ''' import time import threading import Queue class Consumer(threading.Thread): def __init__(self, queue): threading.Thread.__init__(self) self._queue = queue def run(self): while True: # queue.get() blocks the current thread until # an item is retrieved.

2016-06-15 04:02:01

PyQt4 QThread QMutex 多线程及锁

from PyQt4.QtGui import * from PyQt4.QtCore import * import sys class Windows(QDialog): def __init__(self, parent=None): super(Windows, self).__init__(parent) self.startButton = QPushButton("Start") self.stopButton = QPushButton("Stop") self.stopButton.setEnabled(False) self.statusLable = QLabel("Please click \"start\"") self.statusLable.setFrameStyle(QFrame.StyledPanel| QFrame.Plain) topLayout = QHBoxLayout() topLayout.addWidget(self.startButton)

2016-04-09 06:04:02

PyQt 中用 QtNetwork HTTP请求

引子 最近有需求要在 PyQt 中请求一个链接, 因为比较简单直接用 urllib2 处理了, 但是 urllib2 在 有延时的时候会造成 GUI 界面卡死. 所以今天研究研究 QtNetwork 模块. QtNetwork 中的请求在 PyQt 中都是异步的. 简单的请求 QHttp 发起一个GET请求 PyQt4.QtNetwork.QHttp 可以发起一个简单请求, 需要注意的是这个对象需要通过调用 setHost 设置请求主机, 然后 调用 get/post 传入 path 才能正常使用. #!/usr/bin/env python # -*- coding:utf-8 -*- from PyQt4 import QtGui, QtCore, QtNetwork class MainWidget(QtGui.QWidget): def __init__(self, parent=None): super(MainWidget, self).__init__(parent=parent) self.http = QtNetwork.QHttp(parent=self) # 绑定 done 信号 self.http.done.connect(self.on_req_done) self.

2016-03-19 11:30:15

Python 端口复用例子

Python实现端口复用实例如下所示: 例子1 #coding=utf-8 import socket import sys import select import threading host = '192.168.99.100' port = 80 class Thread(threading.Thread): def __init__(self, buf, sockfd): threading.Thread.__init__(self) self.buf = buf self.sockfd = sockfd def run(self): if len(self.buf) != 0: if 'GET' in self.buf: #判断是否是浏览器提交的数据如果是则将提交的数据转发至本地环回地址的80端口 s2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s2.connect(('127.0.0.1', 80)) s2.send(self.buf)

2016-03-12 11:59:30

用Bing API接口实现同IP域名查询(python)

在https://datamarket.azure.com/account/datasets这里注册帐号后申请一个免费的KEY,一个月可以查询5000次,其申请方法网上有很多教程了。 import re import requests r = requests.get('http://www.bing.com/search?q=ip:'+ip+'&count=50') responseHtml = r.content match = re.findall(r' <li class=\"b_algo\"> <h2><a href=\"(.*?)\"', responseHtml) #print match for val in match: print val 继续进行批量查询 #-*- coding: utf-8 -*- import socket import sys import json import requests import re import time import thread def scan(ip_str): ''' 检测扫描端口是否开启 然后利用bing旁站进行

2015-11-18 02:12:37

python编码处理:unicode字节串转成中文 各种字符串举例说明

编码问题一直是很头痛的问题: 当字符串是:'\u4e2d\u56fd' >>>s=['\u4e2d\u56fd','\u6e05\u534e\u5927\u5b66'] >>>str=s[0].decode('unicode_escape') #.encode("EUC_KR") >>>print str 中国 当字符串是:' 东亚学团一中' >>>print unichr(19996) 东 ord()支持unicode,可以显示特定字符的unicode号码,如: >>>print ord('A') 65 只要和Unicode连接,就会产生Unicode字串。如: >>> 'help' 'help' >>> 'help,' + u'python' u'help,python' 对于ASCII(7位)兼容的字串,可和内置的str()函数把Unicode字串转换成ASCII字串。如: >>>

2015-11-13 04:36:39

Python使用Socket(Https)Post登录

以前都是用一些高级模块,封装的比较好,今天尝试使用socket模块登录百度,弄了半天才弄好,主要由于百度在登陆页使用了https,我们需要对socket进行一定处理 登录百度,首先当然是先抓百度的登录包 ,由于是网页登录,最方便的自然是httpwatch了,我使用的测试账号是itiandatest1,密码是itianda,抓包结果: POST /?login HTTP/1.1 Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* Referer: https://passport.baidu.com/?login&tpl=mn Accept-Language: zh-CN User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3

2015-11-13 02:48:48

python socket学习

1. Python Socket编程简介 Socket通常也称作"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 三种流行的套接字类型是:stream,datagram和raw。stream和datagram套接字可以直接与TCP协议进行接口,而raw套接字则接口到IP协议。 Python Socket模块提供了对低层BSD套接字样式网络的访问,使用该模块建立具有TCP和流套接字的简单服务器。详见https://docs.python.org/2/library/socket.html 2. Python Socket Server 实现代码如下 # -*- coding:utf-8 -*- from socket import * def SocketServer(): try: Colon = ServerUrl.find(':') IP = ServerUrl[0:Colon] Port = int(ServerUrl[Colon+1:]) #建立socket对象 print 'Server start:%s'%ServerUrl sockobj = socket(AF_I

2015-11-12 16:12:24

Python getpeercert获取ssl证书信息

我想获得一个ssl证书的信息从一个域名。    我用下面的代码连接反应。 import ssl import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(1) wrappedSocket = ssl.wrap_socket(sock) try: wrappedSocket.connect(('www.google.com', 443)) except: response = False else: der_cert = wrappedSocket.getpeercert(False) der_cert_bin = wrappedSocket.getpeercert(True) print(der_cert) print(der_cert_bin) pem_cert = ssl.DER_cert_to_PEM_cert(wrappedSocket.getpeercert(True)) print(pem_cert) wrappedSocket.close() 输出如下 {} b'0\x82\x04v0\x82\x03^\xa0\x03\x02\x01\x02\x02\x0

2015-10-28 20:17:42

Python Raw Socket使用示例(发送TCP SYN数据包)

1. TCP SYN扫描 端口扫描常用于用于探测服务器或主机开放端口情况,被计算机管理员用于确认安全策略,同时被攻击者用于识别目标主机上的可运作的网络服务。端口扫描 是向一定范围的服务器端口发送对应请求,以此确认可使用的端口。虽然其本身并不是恶意的网络活动,但也是网络攻击者探测目标主机服务,以利用该服务的已知 漏洞的重要手段。 TCP SYN扫描是端口扫描众多方式中的一种,其他方式包括TCP扫描,UDP扫描,ACK扫描,窗口扫描和FIN扫描等。 TCP SYN扫描是另一种TCP扫描。端口扫描工具不使用操作系统原生网络功能,而是自行生成、发送IP数据包,并监控其回应。这种扫描模式被称为“半开放扫 描”,因为它从不建立完整的TCP连接。端口扫描工具生成一个SYN包,如果目标端口开放,则会返回SYN-ACK包。扫描端回应一个RST包,然后在握 手完成前关闭连接。如果端口关闭了但未使用过滤,目标端口应该会持续返回RST包。 TCP SYN扫描优点: 给扫描工具全权控制数据包发送和等待回应时长的权力,允许更详细的回应分析。 SYN扫描从不会建立完整的连接。 2. python 代码 使用raw socket进行SYN 洪泛,封装多个函数使其模块化和易于理解。利用结构体可以方便的使用格式化字符串和变量列表来编码数据包。 import sys import time import socket