MagicalFinder対応

3日のMagical Finder対応改善。LANDISKGT110bRockDiskNextの3ノード分のメッセージ送信を、クライアントからのUDP/51065トリガーに対してオンデマンドで繰り返すように改修。これをdaemon起動しておけばよさそうだ。

yano@GT110b:~$ cat `~/MagicalFinder/mf_all_nas.py`;
# -*- coding: utf-8 -*-
import socket
import sys
MAGICAL_PORT = 51065
###########################################################
# for GT110b (192.168.199.1)
###########################################################
def make_GT110b():
    payload = bytearray([0x07,0x4c,0x5f,0x11,0x67,0x00])
    payload.extend([0,0,0,0,0,0,0,0])
    payload.extend([192,168,199,1])                 # NAS ip address
    payload.extend([255,255,255,0])                 # subnetmask
    payload.extend([192,168,199,254])               # gateway
    payload.extend([0x00, 0x50])                    # length ?
    payload.extend([0x94,0xde,0x80,0xXX,0xYY,0xZZ]) # MAC address
    payload.extend("GT110b@BRAVOTOURING")
    payload.extend([0,0,0,0,0,0])
    payload.extend([0,0,0,0,0,0,0,0])
    payload.extend([0,0,0,0,0,0,0,0])
    payload.extend([0,0,0,0,0,0,0,0])
    payload.extend([0,0,0,0,0,0,0,0])
    payload.extend([0,0,0,0,0,0,0,0])
    payload.extend([0,0,0,0,0,0,0,0])
    payload.extend([0,0,0,0,0,0,0,0])
    payload.extend("IO-DATA")
    payload.extend([0,0,0,0,0,0,0,0,0,0])
    return payload;
###########################################################
# for LANDISK-AV (192.168.199.20)
###########################################################
def make_LANDISK():
    payload = bytearray([0x07,0x4c,0x5f,0x11,0x67,0x00])
    payload.extend([0,0,0,0,0,0,0,0])
    payload.extend([192,168,199,20])                # NAS ip address
    payload.extend([255,255,255,0])                 # subnetmask
    payload.extend([192,168,199,254])               # gateway
    payload.extend([0x00, 0x50])                    # length ?
    payload.extend([0x00,0xa0,0xb0,0xXX,0xYY,0xZZ]) # MAC address
    payload.extend("LANDISK@WORKGROUP")
    payload.extend([0,0,0,0,0,0,0,0])
    payload.extend([0,0,0,0,0,0,0,0])
    payload.extend([0,0,0,0,0,0,0,0])
    payload.extend([0,0,0,0,0,0,0,0])
    payload.extend([0,0,0,0,0,0,0,0])
    payload.extend([0,0,0,0,0,0,0,0])
    payload.extend([0,0,0,0,0,0,0,0])
    payload.extend([0,0,0,0,0,0,0,0])
    payload.extend("IO-DATA")
    payload.extend([0,0,0,0,0,0,0,0,0,0])
    return payload;
###########################################################
# for RDN021 (192.168.199.21)
###########################################################
def make_RDN021():
    payload = bytearray([0x07,0x4c,0x5f,0x11,0x67,0x00])
    payload.extend([0,0,0,0,0,0,0,0])
    payload.extend([192,168,199,21])                # NAS ip address
    payload.extend([255,255,255,0])                 # subnetmask
    payload.extend([192,168,199,254])               # gateway
    payload.extend([0x00, 0x50])                    # length ?
    payload.extend([0x00,0x01,0xd2,0xXX,0xYY,0xZZ]) # MAC address
    payload.extend("RDN021@BRAVOTOURING")
    payload.extend([0,0,0,0,0,0])
    payload.extend([0,0,0,0,0,0,0,0])
    payload.extend([0,0,0,0,0,0,0,0])
    payload.extend([0,0,0,0,0,0,0,0])
    payload.extend([0,0,0,0,0,0,0,0])
    payload.extend([0,0,0,0,0,0,0,0])
    payload.extend([0,0,0,0,0,0,0,0])
    payload.extend([0,0,0,0,0,0,0,0])
    payload.extend("IO-DATA")
    payload.extend([0,0,0,0,0,0,0,0,0,0])
    return payload;
#-------------------------------------------------------------------------
#   top of send_magical
#-------------------------------------------------------------------------
def send_magical(sock):
    dest_address = ('255.255.255.255', MAGICAL_PORT)
#   print >>sys.stderr, 'send to %s port %s' % dest_address
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
    sock.sendto(make_GT110b(), dest_address)
    sock.sendto(make_LANDISK(), dest_address)
    sock.sendto(make_RDN021(), dest_address)
    return;
#-------------------------------------------------------------------------
#   top of main
#-------------------------------------------------------------------------
def main():
    # Create a UDP/IP socket
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    # Bind the socket to the port
    server_address = ('0.0.0.0', MAGICAL_PORT)
    print >>sys.stderr, 'starting up on %s port %s' % server_address
    sock.bind(server_address)
    while True:
        data, address = sock.recvfrom(4096)
        if 0 < data.find("FROM-PC\x00") :
            send_magical(sock)
#-------------------------------------------------------------------------
#   end of main
#-------------------------------------------------------------------------
if __name__ == '__main__':
    main()
# vim:expandtab:ts=4
yano@GT110b:~$ while true;do python `~/MagicalFinder/mf_all_nas.py`; sleep 3;done

参照

AV Watch http://av.watch.impress.co.jp/

IODATA アイ・オー・データ機器 http://www.iodata.jp/

Python Wiki https://wiki.python.org/

価格.com - 「買ってよかった」をすべてのひとに。 http://kakaku.com/

Amazon.co.jp https://www.amazon.co.jp/