Python socket模組應用

2021-09-08 14:07:48 字數 3749 閱讀 5547

【socket】

本文記錄了一些socket模組的簡單應用,對於具體原理還沒來得及深究。

■  利用socket模組進行埠連線驗證和掃瞄

在linux中常用nc命令來進行遠端埠是否開放的驗證。但是這個命令並不是系統自帶的,所以還比較麻煩。如果利用python自帶的socket模組就可以比較自由地進行埠驗證了。是這樣用的:

importsocket

defport_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()

print

"[*]你監聽的是:%s:%d

" % (add[0],add[1])

while

true:

data = client.recv(1024)

ifnot

data:

break

print

data

data = raw_input('

> ')

client.send(data)

else

: client.close()

except

exception as e:

print

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:

print

'waiting for message ....

'data, addr = udpsersock.recvfrom(bufsize) #

接受udp

print

'get client msg is:

', data

udpsersock.sendto(

'[%s] %s

' %(ctime(),data), addr) #

傳送udp

print

'received from and returned to:

',addr

except

exception,e:

print

'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

print

'server :

', data

except

exception,e:

print

'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或...