ページ 11

C言語と関係ない質問なのですが・・・

Posted: 2010年8月30日(月) 11:40
by AXE
まったく関係なくもありません・・・
インターネットに接続するときのIPアドレスありますよね(グローバルIPアドレス)
通常、固定IPにしていないかぎり変動IPだと思うのですが、
IPを変更するにはルーターの電源を切ったりしなければなりません。

これを好きなときに変更するようなプログラムを作成したいのですが
IPを変更することは可能でしょうか?
自分の使っているルーターはBUFFALOのBBルーターという有線のルーターなのですが
ブラウザからhttp://192.168.11.1/にアクセスするとログインフォームが出てきて
認証すると接続、切断とあるので切断したあとに接続するとIPが変わります。

こんな感じでIPを変更することはできないでしょうか?

Re:C言語と関係ない質問なのですが・・・

Posted: 2010年8月30日(月) 12:03
by シエル
ipconfig /release
ipconfig /renew

をC言語からでも、コマンドプロンプトからでもやれば行けるかも。
私はたまにやります。
ですが、やるなら自己責任でお願いします。責任は持てません。

Re:C言語と関係ない質問なのですが・・・

Posted: 2010年8月30日(月) 12:13
by softya
ルータがある場合、ipconfig はローカルのIPしか開放しないと思います。

試していないですが、UWSCで操作できないでしょうか?
http://www.uwsc.info/

Re:C言語と関係ない質問なのですが・・・

Posted: 2010年8月30日(月) 12:23
by シエル
ipconfigはローカルのIPだけでしたか;失礼しました。

VBSとかでもやろうと思えばできますよ。

Re:C言語と関係ない質問なのですが・・・

Posted: 2010年8月30日(月) 13:52
by たろ
C言語で、という話になると、ソケット通信するプログラムで、

1) http://192.168.11.1/にログイン
2) 切断クリック
3) 接続クリック

だけを行う専用HTTPクライアントを自作する感じでしょうか。
でもけっこう面倒ですね(私には)。

VBScript/JScriptの方が簡単に作れたりするのかな?
あ、それがシエルさんの「VBSでもできる」という事でしょうか。

Re:C言語と関係ない質問なのですが・・・

Posted: 2010年8月30日(月) 13:58
by シエル
>>たろさん

そうです。

私がパッと思い浮かんだのは、IEオブジェクトを作成して該当のアドレスのページを開き、
その後、WSHShellオブジェクトを作成し、Appacitivateで該当ウィンドウをアクティブにした後、
Sendkeysでを駆使して、切断と接続ボタンを押下させるというようなものです。
キー送信を使ってるので、うまくいかないこともありますし、あまりお勧めしません。
画像

Re:C言語と関係ない質問なのですが・・・

Posted: 2010年8月30日(月) 14:05
by へろりくしょん
直接HTTPメッセージを送ればいいのではないでしょうか。

perlとかで簡単に出来そうな気がします。

などと言うだけ言ってみます。

Re:C言語と関係ない質問なのですが・・・

Posted: 2010年8月31日(火) 16:51
by AXE
ご返答ありがとうございます。
私もソケットは考えて作成しましたが何度も変更してたら500エラーになってしまいました…

いまの段階ではそこまで短時間のうちに変更することはしないのでいいのですが、
いずれは5分、10分、15分と項目から指定した時間毎に変更するようなものを作りたいので
今のままだとダメです。

なにかいい方法はないでしょうか?

ちなみに私の場合は
http://192.168.11.1/
ですが、これは人によって違うはずです。
友達とかにも配布したりして感想を聞きたいのですが、こっちも解決法があったらお願いします。

Re:C言語と関係ない質問なのですが・・・

Posted: 2010年9月01日(水) 00:44
by たろ
>…何度も変更してたら500エラーになってしまいました…

家庭用のブロードバンドルータって、あまり短い間隔で切断・接続が繰り返される
ことを想定していないのでは?という気がします。ですので エラーになってしまう
事があるのは、しょうがないのかな・・と思います。要するに「あまり短い間隔で
切断・接続を繰り返さないでください」という事かなと・・。

>友達とかにも配布したりして感想を聞きたいのですが、こっちも解決法があったらお願いします。

ルータのIPアドレスが違っても、ルータの機種が違っても、動作するようにしたい、
ということでしょうか?

IPアドレスはまあいいとして、メーカーや型式の違うルータに対応するというのは、
なかなか大変そうな気がします。確かにできたらよいなと思いますが。

1つの機種について「ログイン・切断・接続方法の仕様を調べる」「実装する」
「動作を確認」という手順を繰り返して、対応機種を1つずつ増やしていく感じ
でしょうか。機種の違いの多くは、HTTPリクエストの形式が少し違うくらいかな
と思いますが、その情報は恐らく公開されてないでしょうし、そうすると、実機
を使って確認するしかないと思います。

※ルータに詳しいわけではないので違ってたらすみません。 画像

Re:C言語と関係ない質問なのですが・・・

Posted: 2010年9月01日(水) 17:27
by AXE
結論で言うと出来ないということでしょうか?

Re:C言語と関係ない質問なのですが・・・

Posted: 2010年9月01日(水) 18:04
by softya
>結論で言うと出来ないということでしょうか?

ルータが繰り返しでエラーになる原因は、返ってくるパケットをちゃんと調べたほうが良いと思いますね。待ち時間とかを制御すれば出来るかも知れませんので。

あとブロードバンドルータが何らかのパケットに応答するという共通仕様は無いとおもいますので、メーカー毎に実装が違うと思います。つまり、色んなメーカーや型番のルータでどんなパケットに応答するか調べて、あとはIPスキャンで探し出すしか無いんじゃないでしょうか?

Re:C言語と関係ない質問なのですが・・・

Posted: 2010年9月01日(水) 18:41
by たろ
技術的にはできると思います。
ただ、いろいろなルータに対応する方法を想像すると、

・最初は家族や友人知人が違うルータを使っているなら、それで調査やテストを
 させてもらい、対応機種を2つ、3つと増やしていく。

・頼める人がいなくなったら、どうしよう、自分で契約プロバイダやプラン(コース)
 を次々に変更して、いろんなルータを手に入れて、対応機種を増やしていくことも、
 できなくはないが・・。

という、(プログラミングの問題でなく)手間と時間とお金の話になりました。(私の予想では。)

HTTP500エラーの件は、softyaさんもおっしゃってますが、エラーにならないように
待ち時間を入れて回避することはできないでしょうか?