Python UDP廣播實現遠端控制

2021-08-15 06:22:52 字數 2379 閱讀 8147

應用場景

樹莓派連線在乙個動態ip的環境,我們需要知道ip位址進行ssh連線或者sftp檔案上傳

遠端執行命令,關機/殺程序/等

服務端 broadcast_server.py

# -*- coding:utf-8 -*-

import socket

import pickle

import os

import sys

reload(sys)

sys.setdefaultencoding('utf8')

s = socket.socket(socket.af_inet, socket.sock_dgram)

s.setsockopt(socket.sol_socket, socket.so_broadcast, 1)

port = 1060

s.bind(('', port))

print

'listen...', s.getsockname()

defcmd

(cmd):

p = os.popen(cmd,'r',1)

dat = p.read()

p.close()

return dat

defget_result

(action,code,params,message,dat):

r =

return r

while

true:

data, address = s.recvfrom(65535)

rec = pickle.loads(data)

print('<-{}:{}'.format(address,rec ))

sent = ""

if rec['action'] == "cmd":

res = cmd(rec['params'])

sent = pickle.dumps(get_result("cmd",0,rec['params'],"操作成功",))

print('-> {}'.format(address ))

s.sendto(sent.encode("utf-8"),address)

客戶端 broadcast_client.py

import socket

import pickle

import argparse

parser = argparse.argumentparser()

parser.add_argument('-a','--action',help='the action you want to send')

parser.add_argument('-c','--cmd',help='the command you want to execute')

args = parser.parse_args()

print args.action,args.cmd

s = socket.socket(socket.af_inet, socket.sock_dgram)

s.setsockopt(socket.sol_socket, socket.so_broadcast, 1)

port = 1060

network = '

'sent_data =

s.sendto(pickle.dumps(sent_data).encode('utf-8'), (network, port))

rec = s.recv(65535)

b = pickle.loads(rec)

print

"data:",b['data']['result']

使用說明:服務端程式放在宿主電腦中,我們還必須設定其開啟自動執行,可在~/.bashrc 中寫入執行命令

nohup python broadcast_server.py &

我們可以定義自己的action,去操作不同的功能,更多功能請自行斟酌.這是乙個好思路,比如應用於家庭中對燈,窗簾等控制

客戶端執行例子:

python broadcast_client.py -a cmd -c 'ifconfig'

python broadcast_client.py -a cmd -c 'netstat'

python broadcast_client.py -a cmd -c 'ps -aux | grep python'

python broadcast_client.py -a cmd -c 'kill -9 22234'

python broadcast_client.py -a cmd -c 'shutdown'

本小專案未完待續

Linux UDP實現廣播

特點 較tcp來講udp無需建立連線可以直接傳送訊息,udp是對網路環境完全不彌補的協議,所以使用dup就要允許有一定的丟包率,udp廣播是面向區域網內所有的裝置的。對比tcp連線時服務端的ip位址的重要性來講,udp廣播中本機的ip顯得並不重要了。在udp廣播中不同於tcp的我們需要對網路套接字設...

python udp的應用 ,多執行緒實現聊天功能

之前我們一起實現過單執行緒的udp聊天功能,但是並不實用,這裡我們用多執行緒重新寫下 如下 import socket import threading defprint menu 顯示選單 print 請輸入你要進行的操作 1 傳送資料 接收資料 退出 defrecv data udp socke...

UDP廣播socket實現

udp廣播 const int max buf len 255 int main int argc,char argv if lobyte wsadata.wversion 2 hibyte wsadata.wversion 2 建立socket socket connect socket conn...