摘要:常用工具后面的三個(gè)工具無法安裝,原因目前不知,后面用來時(shí)再尋找解決方法是一個(gè)非常強(qiáng)大的加密解密對(duì)于信息的加密和破解是需要經(jīng)常用到的在下,安裝報(bào)錯(cuò)后,需要安裝一個(gè)的軟件即可,詳細(xì)看安裝的報(bào)錯(cuò)信息在下,發(fā)現(xiàn)找不到此發(fā)現(xiàn)只在系統(tǒng)下才自帶有此模
0:常用工具
#后面的三個(gè)工具無法安裝,原因目前不知,后面用來時(shí)再尋找解決方法 pip install python-nmap python-bluez bluetooth python obexftp #pycrypto是一個(gè)非常強(qiáng)大的加密解密module,對(duì)于信息的加密和破解是需要經(jīng)常用到的 pip install pycrypto #在windows下,安裝報(bào)錯(cuò)后,需要安裝一個(gè)VCForPython27.msi的軟件即可,詳細(xì)看安裝的報(bào)錯(cuò)信息 #在windows下import crypt,發(fā)現(xiàn)找不到此module,發(fā)現(xiàn)只在linux系統(tǒng)下Python才自帶有此模塊 crypt.crypt(word, salt) #這個(gè)module只有這一個(gè)函數(shù)1:Python基礎(chǔ)
#導(dǎo)入自己寫的module
import sys
sys.path.append("C:/pyqt/chap02") #把我們寫的module路徑添加到了path路徑,這里我們就可以import自己寫的module了
#data type
port=23
banner="hello hacker"
type(port)
type(banner)
banner.upper()
banner.lower()
banner.replace("old","new")
banner.find("hacker")
#list
portlist=[]
portlist.append(22)
portlist.append(80)
print portlist
portlist.sort() #對(duì)portlist進(jìn)行排序
pos=portlist.index(80)
portlist.remove(443)
print portlist
cnt=len(portlist)
#dictionary
services={"ftp":21,"ssh":22,"smtp":25,"http":80}
services.keys() # return list
services.items() #change to tuple couple
services.has_key("ftp") #true or false
services["ftp"] # return value
2:Networking部分
import socket
socket.setdefaulttimeout(2) #2秒時(shí)長(zhǎng)沒有收到想要的數(shù)據(jù)長(zhǎng)度,就返回了socket.timeout 異常
s=socket.socket() #創(chuàng)建一個(gè)socket對(duì)象
s.connect(("8.8.8.8",21))
ans=s.recv(1024) #從服務(wù)器接收 1024個(gè)數(shù)據(jù) ,如果在2秒內(nèi),沒有接收完,就會(huì)返回 socket.timeo9ut異常
3: Python簡(jiǎn)單異常處理
try:
3/0
except:
print "3/0 is illegal"
#下面是除0后,得到的ZeroDivisionError
>>> 3/0
Traceback (most recent call last):
File "", line 1, in
ZeroDivisionError: integer division or modulo by zero
#異常處理可以保證,程序出錯(cuò)后,自動(dòng)處理錯(cuò)誤,程序可以接著運(yùn)行下
#沒有異常處理,程序會(huì)由于這些異常直接退出
#查看異常類型:
try:
15/0
except Exception, e:
print "Error"+str(e)
#socket中使用異常處理
import socket
socket.setdefaulttimeout(2)
s=socket.socket()
try:
s.connect(("8.8.8.8",21)) # 成功后,不會(huì)運(yùn)行except部分
except Exception,e:
print "error"+str(e) # connect失敗后,會(huì)運(yùn)行這部分代碼
4:函數(shù)的使用
import socket
def abc(arg1,arg2):
try:
socket.setdefaulttimeout(2)
xxx
return
except:
return
def main():
xxx
if __name__=="__main__":
main()
5:IP,Port的掃描
portList=[21,22,25,80,110]
for x in range (1,255):
for port in portList:
print "Checkingt 192.168.1"+str(x)+":"+str(port)
#文件的行讀取
f=open("hello.txt","r")
for line in f.readlines():
if line.strip("
") in banner: #從文件中讀取到的行內(nèi)容是否有用
print "xxxx"
6:sys,os,系統(tǒng)模塊
import sys
if len(sys.argv)==2:
filename=sys.argv[1]
print "filename"+filename
import os
if not os.path.isfile(filename)
pirnt filename+" does not exist"
return
if not os.access(filename,os.R_OK): #chmod 000 a.txt 后,就無法access
print filename+" access denied"
return
7:運(yùn)行時(shí)決定是否生成函數(shù)
import sys
if sys.version_info[:2] <(2,4): #小于2.4的版本沒有sorted這個(gè)函數(shù),那么我們自己寫一個(gè),用自己的
def sorted(items):
xxx
xxx
return items
8:Python異常處理
#運(yùn)行過程:
#先try,輸出 hello ahc,然后運(yùn)行3/0后報(bào)錯(cuò)
#接下來進(jìn)行except,輸出except happened
#接下來程序接著往下走(不會(huì)執(zhí)行else)
for i in dir(a):
try:
print "hello ahc"
3/0
except:
print "except happened"
else:
print "run without except"
#運(yùn)行過程:
#輸出hello ahc,由于沒有異常,所以會(huì)運(yùn)行else,輸出run always
try:
print "hello ahc"
except:
print "except happened"
else:
print "run without except"
# 下面是一個(gè)標(biāo)準(zhǔn)的異常處理過程
try:
process()
except IndexError, e:
print "Error: %s" % e
except LookupError, e:
print "Error: %s" % e
9:根據(jù)不同的操作系統(tǒng),選擇采用不同的文件路徑表達(dá)形式(實(shí)用)
import platform
os_type=platform.platform().lower()
if "windows" in os_type:
fontfile=r"C:WindowsFonts imesi.ttf"
else:
fontfile="/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Italic.ttf"
10:nmap常用指令
nmamp -sP 192.168.1.1/24 #simple information sudo namp -O -PN 192.168.1.1/24 #detail infromation11:python socket發(fā)送http get請(qǐng)求
#!/usr/bin/env python
# Foundations of Python Network Programming - Chapter 1 - search4.py
import socket
sock = socket.socket()
sock.connect(("maps.google.com", 80))
sock.sendall(
"GET /maps/geo?q=207+N.+Defiance+St%2C+Archbold%2C+OH"
"&output=json&oe=utf8&sensor=false HTTP/1.1
"
"Host: maps.google.com:80
"
"User-Agent: search4.py
"
"Connection: close
"
"
")
rawreply = sock.recv(4096)
print rawreply
12:socket編程要求點(diǎn)
import socket
創(chuàng)建sock對(duì)象
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #使用ipv4,使用udp協(xié)議
server:
創(chuàng)建sock
s.bind(("ip",port)) #綁定地址 ip是0.0.0.0時(shí),是監(jiān)聽全網(wǎng),ip是127.0.0.1時(shí),只監(jiān)聽內(nèi)網(wǎng)
data,address=s.recvfrom() #監(jiān)聽消息 在此block
s.sendto("msg",address) #利用上面的地址(ip,port),來發(fā)送msg
client:
創(chuàng)建sock
s.sendto("msg",address) #操作系統(tǒng)會(huì)根據(jù)需要,隨機(jī)分配port
data,addr=s.recv(MAX) #這里得到的addr就是上面sendto使用的地址(ip,port)
13:socket編程處理服務(wù)器端丟包問題
import socket
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.connect((hostname,port))
delay=0.1
while True:
s.send("this is another message")
s.settimeout(delay)
14:使用socket發(fā)送二進(jìn)制原始數(shù)據(jù)(DNS協(xié)議的研究)
import socket data="8d890100000100000000000005626169647503636f6d0000010001" rawdata=bytes.fromhex(data) # dns raw data to get baidu ip s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) DNSserver="202.114.0.242" s.connect((DNSserver,53)) s.send(rawdata) #這里直接發(fā)送的是16進(jìn)制的數(shù)據(jù) recvData=s.recv(266) #得到的數(shù)據(jù)也是最原始的16進(jìn)制數(shù)據(jù),需要閱讀DNS協(xié)議的格式,然后對(duì)數(shù)據(jù)進(jìn)行解包 print(recvData)15:使用下面程序研究?jī)蓚€(gè)主機(jī)之間UDP包能傳送的最大數(shù)據(jù)量是多少
一般的udp包能傳送的最大數(shù)據(jù)量為1500bytes
#client
import IN,socket,sys
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
MAX=65535
PORT =1060
s.connect(("192.168.1.1",PORT))
s.setsockopt(socket.IPPROTO_IP,IN.IP_MTU_DISCOVER,IN.IP_PMTUDISC_DO)
try:
s.send("#"*2500)
except socket.error:
print "message did not make it"
option=getattr(IN,"IP_MTU",14)
print "MTU:",s.getsockopt(socket.IPPROTO_IP,option)
else:
print "the big message was sent! Your network supports really big packet"
16:socket的一些屬性的設(shè)置和得到
s=socket.socket(xx) s.setsockopt(xxx) value=s.getsockopt(xx) #例子,是否允許廣播UDP包 value=s.getsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST) s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,value) SO_DONTROUTE:只允許包發(fā)送給子網(wǎng)host SO_TYPE:當(dāng)把這個(gè)參數(shù)傳遞給getsockopt函數(shù)時(shí),得到當(dāng)前socket使用的是tcp or udp17:如何發(fā)送UDP廣播包 (broadcast packet)
客戶端可以開啟廣播選項(xiàng):這樣發(fā)的廣播包其它的機(jī)器都能接到
服務(wù)器端也可開啟接收廣播包的選項(xiàng)?才能接收廣播包?這個(gè)要到后面實(shí)驗(yàn)看效果:
不需要進(jìn)行其它的配置,只需使用使用sendto時(shí),把具體的server ip地址換成廣播地址
###client:
import socket
port=1080
broadcastip="192.168.191.255" #mask =255.255.255.0 network addr=192.168.191.0
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)
print ("sending message to %s:%s" %(broadcastip,port))
s.sendto("this is a broadcast message",(broadcastip,port))
###server:
import socket
def getLocalIPandHeader(): #得到本機(jī)ip地址的函數(shù)
"""
return localIP and IPhead
like this :192.168.1.11 , 192.168.1.
"""
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("baidu.com", 0))
ip=s.getsockname()[0]
lastdotpos=ip.rfind(".")
iphead=ip[:lastdotpos+1]
return ip,iphead
port=1080
bindip,iphead=getLocalIPandHeader()
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)
s.bind((bindip,port))
while True:
data,addr=s.recvfrom(200)
pmsg="i got message from %s say: %s" %(addr,data)
print(pmsg)
18:關(guān)于文件路徑的操作
#__file__ 這個(gè)變量中保存了該程序的文件名 abspath=os.path.abspath(__file__) # a.py ---> /home/gaoy/pyweb/a.py current_dir=os.path.dirname(abspath) #/home/gaoy/pyweb/a.py --->/home/gaoy/pyweb19:python裝飾器的運(yùn)行過程
def skin(func):
print "in skin"
def run():
print "in run"
func()
print "after func"
return run
@skin
def myprint():
print "in my print function"
myprint()
#運(yùn)行結(jié)果如下 :
==========================
in skin
in run
in my print function
after func
==========================
#如上myprint()函數(shù)被skin裝飾
當(dāng)我們調(diào)用myprint()函數(shù)時(shí),發(fā)生了什么?如下:
首先skin(myrint())函數(shù)會(huì)被調(diào)用,所以會(huì)打印出 "in skin"字符串
由于run中函數(shù)是在skin函數(shù)中定義的并沒有調(diào)用,所以不會(huì)馬上運(yùn)行,
重點(diǎn)就在這里的return run,return的run函數(shù)給誰(shuí)呢?python解釋器會(huì)把
這個(gè)return的值賦值給myprint,然后調(diào)用“新的”myprint()函數(shù)
簡(jiǎn)單的說,如果函數(shù)被裝飾后,按下面方式運(yùn)行:
1:運(yùn)行skin(myprint) #decorator(func)
2:運(yùn)行裝飾器內(nèi)部定義的函數(shù) #run()
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/37892.html
摘要:前言本文翻譯自上的利用,這是中的的一個(gè)入門教程。原文是英文,但有日本同志翻譯的日文版。這是為了提供一個(gè)基本的低音増幅效果在這個(gè)例子中可以設(shè)定過濾器的種類,周波數(shù),甚至的值。如果是過濾器的話,可以提供一個(gè)比指定周波數(shù)低的低音増幅。 前言 本文翻譯自MDN上的《Web Audio APIの利用》,這是HTML5中的Web Audio API的一個(gè)入門教程。原文是英文,但有日本同志翻譯的日文...
閱讀 935·2021-10-09 09:44
閱讀 2353·2021-09-22 15:54
閱讀 5484·2021-09-22 10:55
閱讀 1591·2019-08-29 18:41
閱讀 919·2019-08-29 11:24
閱讀 2258·2019-08-28 18:20
閱讀 1178·2019-08-26 11:51
閱讀 3207·2019-08-26 11:00