【socket】
本文記錄了一些socket模組的簡單應用,對於具體原理還沒來得及深究。
■ 利用socket模組進行埠連線驗證和掃瞄
在linux中常用nc命令來進行遠端埠是否開放的驗證。但是這個命令並不是系統自帶的,所以還比較麻煩。如果利用python自帶的socket模組就可以比較自由地進行埠驗證了。是這樣用的:
importsocketdefport_check(host,port):
sk = socket.socket(socket.af_inet,socket.sock_stream) #建立socket物件 sk.settimeout(1) #設定超時,否則可能等很久才會返回連不通埠的資訊 try: sk.connect((host,port)) #進行socket層面的連線,注意引數是乙個tuple exceptsocket.error as e: print "{}:{} is not opened. {}".format(host,port,str(e)) else: print "{}:{} is opened.".format(host,port) finally: sk.close() if __name__ == '__main__': port_check('127.0.0.1',22)
如果想要對遠端主機進行埠掃瞄的話,只要在這個函式外麵包一層for i in range(1,1024),就可以了,考慮到效率問題還可以引入多執行緒。更多詳細操作,可以看【需要提醒一點的是,在沒有得到允許情況下,私自對別人的主機進行埠掃瞄被認為是不友好的挑釁行為。
■ 構建tcp客戶端傳送tcp報文
#!/usr/bin/env python
#coding=utf-8
import
socket
target_host = "
127.0.0.1
"target_port = 1234
#建立乙個socket物件
client =socket.socket(socket.af_inet,socket.sock_stream)
#鏈結客戶端
client.connect((target_host,target_port))
while
true:
data = raw_input('
> ')
client.send(data)
data = client.recv(4096)
ifnot
data:
break
print data
構造出來的是乙個帶有字元提示的簡單tcp報文傳送器。**很簡單,不多說了。
■ 構建tcp服務端
#! /usr/bin/env python
#coding=utf-8
import
socket
bind_ip = ""
bind_port = 9999server =socket.socket(socket.af_inet,socket.sock_stream)
server.bind((bind_ip,bind_port))
server.listen(5)
try:
while
true:
client,add =server.accept()
"[*]你監聽的是:%s:%d
" % (add[0],add[1])
while
true:
data = client.recv(1024)
ifnot
data:
break
data
data = raw_input('
> ')
client.send(data)
else
: client.close()
except
exception as e:
eserver.close()
■ 構建udp服務端
#-*- coding: utf-8 -*-
from socket import *
from time import
ctime
host = ''
#主機名
port = 21567 #
埠號bufsize = 1024 #
緩衝區大小1k
addr =(host,port)
udpsersock =socket(af_inet, sock_dgram)
udpsersock.bind(addr)
#繫結位址到套接字
while true: #
無限迴圈等待連線到來
try:
'waiting for message ....
'data, addr = udpsersock.recvfrom(bufsize) #
接受udp
'get client msg is:
', data
udpsersock.sendto(
'[%s] %s
' %(ctime(),data), addr) #
傳送udp
'received from and returned to:
',addr
except
exception,e:
'error: ',e
udpsersock.close()
#關閉伺服器
■ 構建udp客戶端
#-*- coding: utf-8 -*-
from socket import *host = '
localhost'#
主機名port = 21567 #
埠號 與伺服器一致
bufsize = 1024 #
緩衝區大小1k
addr =(host,port)
udpclisock =socket(af_inet, sock_dgram)
while true: #
無限迴圈等待連線到來
try:
data = raw_input('
>')
ifnot
data:
break
udpclisock.sendto(data, addr)
#傳送資料
data,addr = udpclisock.recvfrom(bufsize) #
接受資料
ifnot
data:
break
'server :
', data
except
exception,e:
'error: ',e
udpclisock.close()
#關閉客戶端
python socket 函式 模組
import socket socket 函式 1,語法格式 socket.socket family type proto family 套接字家族可以使af unix或者af inet type 套接字型別可以根據是tcp連線和udp連線分為sock stream或sock dgram prot...
python socket模組 監控埠
import socket,re 叫做非貪婪匹配,盡可能的少匹配 叫做貪婪匹配,盡可能的多匹配 a fenif1212nfi129f21f res re.compile d findall a print res hosts 1.1.1.1 90 2.2.2.2 8080 127.0.0.1 80 ...
python socket模組和方法
要建立套接字,必須使用 socket.socket 函式,它一般的語法如下。socket socket family,socket type,protocol 0 其中,socket family 是 af unix 或 af inet 如前所述 socket type 是 sock stream或...