首页 > 其他 > 详细

oscserver

时间:2019-08-11 10:11:34      阅读:112      评论:0      收藏:0      [点我收藏+]
import socket
import binascii
import pprint

from pythonosc.udp_client import SimpleUDPClient    # 导入客户端
from pythonosc.dispatcher import Dispatcher  # 导入包中的文件dispatcher中的Dispatcher类
from pythonosc.osc_server import BlockingOSCUDPServer   # 导入包中的osc_server中的BlockingOSCUDPServer类

WakeOnLan = /wakeonlan        # 定义收到的OSC是‘/wakeonlan‘ 
# 定义端口
ip_localhost = 127.0.0.1
port_localhost = 5005           # 本机接收端口

ip_remote = 192.168.0.195     # 被发送到的ip
port_remote = 7008              # 远程端口

welcome = fOSC 服务器运行在本机的 [ {port_localhost} ] 端口......
print(welcome)
# 收到‘/wakeonlan‘
def print_handler(address,*args):
    print(f收到唤醒魔包:{address}: {args})
    # 发送魔包
    ‘‘‘
    格式化mac地址,生成魔包,然后发送
    mac.txt 中的地址必须格式化为每行一个mac地址.如下形式都可以:
    44850004F4EE
    00-FF-AC-C0-BB-CA
    44-85-00-04-F4-EE
    44:87:01:04:F4:EE
    ‘‘‘
    f = lambda x:x.strip() if len(x.strip()) == 12 else x.strip().replace(x.strip()[2],‘‘)
    mac = [f(r) for r in open(mac.txt)]
    print(- * 24,目标MAC地址列表,- * 25) # mac.txt中的mac地址会被处理成FFFFFFFFFFFF无分隔符紧揍形式
    pprint.pprint(mac)
    print(- * 66)
    ip = 127.0.0.1  # 0网段广播
    port = 9999               # 魔包发送端口
    pswd = tocentek   # password 
    pswd = pswd.encode()

    s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)
    def sendto(r):
        s.sendto(r,(ip,port))

    #python利用or在列表解析中调用多个函数 http://www.cnblogs.com/gayhub/p/5277919.html
    # 带密码
    [print(向MAC地址:,r,发送唤醒魔术包...) or sendto(binascii.unhexlify(FF*6+r*16) + pswd ) for r in mac]
    # 不带密码
    # [print(‘向MAC地址:‘,r,‘发送唤醒魔术包...‘) or sendto(binascii.unhexlify(‘FF‘*6+r*16)) for r in mac]
    s.close()
    print(- * 15,结束唤醒进程,如未开机,尝试再发一次,- * 15)
    print(welcome)
# ########################################

def default_handler(address,*args):
    client = SimpleUDPClient(ip_remote , port_remote)   # 创建转发客户端
    client.send_message(address,*args) 
    print(-> * 10 ,f向 {ip_remote}:{port_remote} 转发: {address}: {args},-> * 10 )
    print(welcome)


dispatcher = Dispatcher()
dispatcher.map(WakeOnLan,print_handler)     # 收到唤醒魔包,调用print_handler函数
dispatcher.set_default_handler(default_handler) # 否则直接转发

server = BlockingOSCUDPServer((ip_localhost , port_localhost) , dispatcher) # 创建服务器
server.serve_forever()      # 一直跑

需要定义的参数:

  1. 本地接收端口:

port_localhost = 5005           # 本机接收端口

  2. 远程 ip 和端口:

ip_remote = 192.168.0.195     # 被发送到的ip
port_remote = 7008              # 远程端口

  3. 魔包地址:

WakeOnLan = /wakeonlan        # 定义收到的OSC是‘/wakeonlan‘ 

  4. mac.txt 地址簿(程序目录下):

44850004F4EE
00-FF-AC-C0-BB-CA
55-85-00-04-E5-AB
66:87:01:02:F4:0D

 

本程序魔包发送部分引用自codegay,感谢大佬!

 

oscserver

原文:https://www.cnblogs.com/ToCenTek/p/11333788.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!