HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0103
pandaWake on LAN の マジックパケットについて15解決


panda

リンク

2009/1/3(Sat) 21:00:46|NO.22195

夜間エンコマシンでもつくろうかと、Wake on LAN を利用するプログラムを作っていたのですが…。
つまずきました…。皆さんの知恵をお貸しください m(__)m

マジックパケットを UDP で送信して、起動するという単純な操作ができません…。
ちなみに、他ソフトではちゃんと、Wake on LAN ができるので、おそらくプログラム側のミスだとおもいます。
pcbnet2 が必要となります。準備をよろしくお願いします。

・pcbnet2
 http://tsukaban.dyndns.org/~tsukaban/pcbsoft/

・他ソフト
 http://www.vector.co.jp/soft/win95/util/se241927.html
↑このツールを使うと起動する。


以下のスクリプトの動作は
*UDP初期化
*ブロードキャストで送信
*終了

・参考にしたページ
 http://park11.wakwak.com/~cat-y/magicpkt.html

ブロードキャスト系がよくわからないので、間違いまたは、以下のスクリプトの誤点をご指摘していただけると幸いです。


#include "pcbnet2.as" port = 7 host = "255.255.255.255" dim ff,1 dim mac,6 sdim log,1024 ff = 0xFF mac(0) = 0x0A mac(1) = 0x0B mac(2) = 0x0C mac(3) = 0x0D mac(4) = 0x0E mac(5) = 0x0F // UDP ソケット作成 udpsock soc if stat : dialog "ソケットの初期化に失敗しました。",1 : end udpsendto soc,host,port ;// 送信先を指定 // 0xFFを6回送信 repeat 6 udpsend ff,0,1,soc log += "送信:["+ff+"]\n" log += " 結果:"+stat+"\n" loop log += "\n" // MACアドレスを16回送信 repeat 16 repeat 6 udpsend mac(cnt),0,1,soc log += "送信:["+mac(cnt)+"]\n" log += " 結果:"+stat+"\n" loop log += "\n" loop udpclose soc mes "完了" pos 0,40 mesbox log,640,400 stop



この記事に返信する


mm

リンク

2009/1/4(Sun) 17:52:27|NO.22215

パケットを何回にも分けて送信してるのが原因ではないかと。
送信データを一つにまとめて一度だけ送信すれば良いと思います。



panda

リンク

2009/1/5(Mon) 08:33:17|NO.22235

回答ありがとうございます。

しかし、複数のバイナリを変数に代入するにはどうすればいいのでしょうか^^;;

a = 0xAA + 0xFF
↑エラー



ANTARES

リンク

2009/1/6(Tue) 01:00:32|NO.22256

1バイトずつpoke
または
数値配列にしてmemcpy(数値変数の内部構造はリトル・エンディアンを検索)



ANTARES

リンク

2009/1/6(Tue) 01:03:16|NO.22257

あ、1バイトずつpokeより16進数字列を2桁ずつstrmidで取り出してpokeの方がましですね。



ANTARES

リンク

2009/1/6(Tue) 01:04:34|NO.22258

「strfで数値化して」が抜けました



LonelyWolf

リンク

2009/1/6(Tue) 19:11:51|NO.22315

pcbnet2をご利用とのことですので、pcbnet2のpackを
使ってみてはいかがでしょうか?



panda

リンク

2009/1/11(Sun) 12:58:08|NO.22683

回答ありがとうございます。
1つにまとめてみましたが、動作しないようです…。
何か他に原因があるのでしょうか…。


#include "pcbnet2.as" #packopt hide 1 ; ; UDP通信サンプル(クライアント) ; port = 7 host = "192.168.11.255" mac = "FFFFFFFFFFFF" ; サンプルは架空のMACアドレスです。手元にあるのはちゃんとあってます。 sdim mgp,6+6*6 repeat 6 poke mgp,cnt,0xFF c++ loop repeat 6 repeat 6 bin = strmid(mac,cnt*2,2) poke mgp,c,int("$" + bin) c++ loop loop // -- screen 0 title "UDP クライアントテスト" // UDP ソケット作成 udpsock soc ;// 特にポートは指定しない if stat : dialog "ソケットの初期化に失敗しました。",1 : end udpsendto soc,host,port ;// 送信先を指定 // 送信 udpsend mgp,0,6+6*6,soc udpclose soc mes "完了" stop



mm

リンク

2009/1/12(Mon) 10:52:50|NO.22729

MACアドレスが6個しか並んでないからでは。
あなたが紹介したサイトでは16個並べると書いてありますけど。



panda

リンク

2009/1/17(Sat) 19:23:04|NO.22922

16個並べてみましたが…失敗(泣)


repeat 6 repeat 6 bin = strmid(mac,cnt*2,2) poke mgp,c,int("$" + bin) c++ loop loop




repeat 16 repeat 6 bin = strmid(mac,cnt*2,2) poke mgp,c,int("$" + bin) c++ loop loop



A_A

リンク

2009/1/18(Sun) 00:28:01|NO.22929

SO_BROADCAST でググってみては?



panda

リンク

2009/1/18(Sun) 16:04:23|NO.22943

ウ〜ン、、、ネットワーク関係の知識があまり(というか全然)ないんで、チンプンカンプンです。

[PC1(192.168.0.2 )] <--[ルーター(192.168.0.1)]--> [PC2(192.168.0.3)]

この場合だと、ブロードキャスト送信しようとおもうなら "192.168.0.255" ですよね?
でもダメでした…。

困った!(><ll)



panda

リンク

2009/1/18(Sun) 16:11:51|NO.22944

SO_BROADCAST って、WinSock の設定値みたいなもんなんでしょうか…。
pcbnet では限界なのかな…。



mm

リンク

2009/1/19(Mon) 13:33:26|NO.22948

pcbnet2は自動的にアドレスを判断してブロードキャストに対応してたきがしますが、
255.255.255.255以外には対応してないかも。
ルータを超えない普通のLANなら255.255.255.255で問題ないと思います。

sdimとudpsendのところも16になおしたんですね?
とりあえず、データを受信するプログラムを作って受信側のPCで正常なデータが
届いてるのかどうか調べてみたらどうですか。



LonelyWolf

リンク

2009/1/23(Fri) 01:21:32|NO.22995

pcbnet2ではアドレスに関わらず、SO_BROADCASTを設定しているようです。
(NetProc.cppの587行目にて)

まず、mmさんの仰る点を確認してみて、それでもダメだったら
udpcloseでソケットを閉じる前に、udpsentでstat=0となるまで
待機させてみてください。



panda

リンク

2009/1/23(Fri) 16:20:09|NO.22997

返信ありがとうございます。
mmさんの指摘を確認し、LonelyWolfさんのご指摘どおりしたら、起動しました^^

解決!!

また、よろしくお願いします。



ONION software Copyright 1997-2018(c) All rights reserved.