カテゴリ: サーバ関係, SIP/Asterisk, 自宅鯖

ページ: << 1 ... 3 4 5 6 7 8 9 10 11 12 13 ... 15 >>

Windows Media Serviceの制御 on VBScript

パーマリンク 2009/03/31 23:31:41 著者: kumaold メール
カテゴリ: 仕事, サーバ関係, プログラミング, WSH/VBScript

前回はWindows Media Serviceサービス単位での制御まではしましたが、公開ポイントごとの操作などができないと運用上実用的ではありません。

もちろん標準ではGUI画面からしか制御は無理で、コマンドラインから制御するためのコマンドなども一切ありません。


日本語の解説やドキュメントも一切なく、どうも色々調べてみる限りでは「APIだけは提供してやるんでC#, C++, VBで自分で作れ」のようです。

そこで一番取り掛かりやすいVBScriptにて制御スクリプトを作成しました。


まずは、「Windows Server 2003 SP1 Platform SDK(Windows Media サービス 9 シリーズ SDK)」をインストール。(Windows Server 2008でも同じ)

参考になるのはProgramming Reference (Visual Basic .NET)のみ。

これ以外に資料があるわけでもなく、しかもVBと若干オブジェクト名・メソッド名が違っていたりしたので苦労しました。


まだ公開まではできない状態なので主なところだけ抜粋。

'WMSのCOMオブジェクトを作成
Set Server = CreateObject("WMSServer.Server")

'公開ポイントの数取得(これでForループにする)
PubPointCnt = Server.PublishingPoints.Count

'i番目の公開ポイントを参照
Set PubPoint = Server.PublishingPoints.Item(i)

'公開ポイントを開始する
PubPoint.Start()

'公開ポイントを停止する
PubPoint.Stop()

'公開ポイントのソースのパスを指定
PubPoint.Path = "http://example.com/publishing_point"

'公開ポイントの現在の再生者数を取得
Player = PubPoint.Players.Count

この辺をコマンドラインから引数を渡して操作できるようにすることで、PHPからでもsystem()やexec()などで操作・データ取得ができるわけです。

一応これで汎用性の高い制御用スクリプトはできたのであとは組み込むだけです。
 

[改訂版] VBScriptポケットリファレンス (POCKET REFERENCE)[改訂版] VBScriptポケットリファレンス (POCKET REFERENCE)
(株)アンク
技術評論社 2006-05-30
おすすめ平均

同一ネットワークで複数ISPの共有

パーマリンク 2009/03/28 23:58:23 著者: kumaold メール
カテゴリ: 自宅鯖, ネットワーク

先週に光プレミアムが開通してから、LANの未解決事項がひとつ残っていました。


光プレミアムでは最大5セッションまで同時にプロバイダに接続できます。

そこで、CTU下にルータを2台で各ISPにPPPoE接続してLAN側のIPアドレスを同一セグメント(192.168.1.*)にすれば、既存のネットワークはそのままでプロバイダの使い分けができるというわけです。

サーバとクライアントPCを別ISPで使いたい、しかしローカルでもアクセスできるようにしたい、というときにはこの方法が便利です。


しかしながら実際にこの方法でやってみたという例がほとんどなく、理論上は繋がるはずなのにうまくいかないといわけで今日までずっと悩んでいました。

(普通はクライアントIPごとにルーティングが設定できる上級品ルータを使う)

 

謎のパケットがループ

・・・というのも、上の図で(1)~(3)の3本のLANケーブルのうち3本とも繋いでしまうとまったく接続できない状態になってしまうんです。

どれか1本を抜けば、それを除いた部分ではすべてうまく接続できる状態だったので、仕方なく(3)のケーブルを外してLAN内分断状態で放置していました。


先週の時点では、3本とも繋ぐとリンクランプが激しく点滅して最終的にはルータなどを再起動しないとLANや無線もダウンしてしまうことを確認しました。

おそらくパケットがループしている、というのは間違いないようです。

しかし理論上はそんなことが起こるわけないのに。
ルータを通している以上、基本的には宛先不明パケットはルータで破棄されます。

さらに各ルータ自身のIPアドレスを別セグメント(192.168.0.*, 192.168.1.*)にしても同じ症状になるなど完全に意味不明な状態でした。

これはIPv4レベルの話はないことは理解できました。

解決編

もう一度ルータ2の設定を一通りチェックしてみると、かなり分かりにくい場所の「IPv6ブリッジ」(IPv6パススルー)の項目がありました。

単体でPPPoE接続する分には問題なかったので放置していましたが、デフォルトで「有効」になっていたので試しに「無効」に切り替えてみました。


すると、今まではケーブルを3本とも接続するとWAN/LANともダウンしてしまう症状も消えて、ルータ1だけは正常に接続できるようになりました。

しかし相変わらずルータ2はインターネット接続だけはできません。

流れ的に同様のcorega製ルータであることから、今度はルータ1にもIPv6ブリッジの項目を見つけ、無効に設定してみました。

これで再起動をかけてみると両ルータとも6時間経った今でもインターネット接続を維持でき、LAN側ネットワークも無事に共存できているようです。

NTT側のネットワークが原因?

LAN側からIPv6のパケットが流れることは考えづらいです。

フレッツ光プレミアム自体はNTTの地域網はIPv6で接続され、マルチキャスト通信などのパケットもやり取りされています。

それがIPv6ブリッジになるとWAN側からのIPv6パケットが通過し、何らかの原因でルータ1-ルータ2間でパケットがループしてしまうんだろうと推測できます。


結論:セキュリティ的にも、フレッツのIPv6を使用したサービスなどを利用する際以外には極力IPv6ブリッジを無効にしておきましょう。
(標準でONにしてあるcoregaのルータもどうかと思うが)

type="text/javascript">
type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">

[Windows Server]サービスへのアクセス権限

パーマリンク 2009/03/26 23:53:15 著者: kumaold メール
カテゴリ: サーバ関係

動画配信サーバの設定準備中に、外部からWeb画面を通してWindows Media Serviceを操作する必要が出てきました。

本当はVBScript(WSH)を使ってスクリプトを書くべきですが、とりあえずそこはまた後日ということでPHPからサービスの制御で済ませることにしました。


が、そこでこんなに苦労するとは・・・

例えば、コマンドラインからサービスを開始・終了するにはscコマンドです。

sc start サービス名(WMServer)      # サービスの開始
sc stop サービス名(WMServer)      # サービスの停止


PHPからこれをexec()とかsystem()とかで実行すればいいはずですが、普通にやるとどうやってもこうなってしまいます。

[SC] OpenService FAILED 5:

アクセスが拒否されました。

もちろん、この辺は全部試した上での話ですよ。

  • UAC(ユーザーアカウント制御)の無効化
  • IISの実行ユーザをPower Usersグループのメンバに
  • cmd.exeへのアクセス権限を付与
  • sc.exeへのアクセス権限付与
  • WMServer.exeへのアクセス権限付与


しばらく格闘しても結局どうしようもなかったので途方に暮れていると、こんな情報が出てきました。

Windows OSでは、セキュリティを確保するために、システム内部に存在する各種のオブジェクト(ファイルだけでなく、サービスやプロセス、パイプといった、動的に生成されるものも含む)に対して、アクセス権を設定し、権限を持つユーザーやグループからのアクセスを許可し、それ以外からのアクセスを禁止するなどしている。

@IT - セキュリティ設定を記述するSDDL文字列とは?』より


まさに探し求めていた情報です。

まずサービスについての現在のセキュリティ記述子を表示するには、「sc sdshow サービス名(WMServer)」と打ち込みます。

すると、なんか暗号めいたACLの設定文字列が表示されます。
意味は解説しきれないので上のリンク先のページを参考に。

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)
(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)
(A;;CCLCSWLOCRRC;;;IU)
(A;;CCLCSWLOCRRC;;;SU)
S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

現状ではIISの実行ユーザにはサービスの操作権限がないようです。

whoamiコマンドをPHPから実行してみると、ユーザはNetwork Service(略称NS)であることが分かるので、これに実行権限を付加します。

ACLの設定反映には、「sc sdset サービス名(WMServer)」コマンドに続けて、今回は以下の新しい設定を流し込みます。

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)
(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)
(A;;CCLCSWLOCRRC;;;IU)
(A;;CCLCSWLOCRRC;;;SU)
(A;;GX;;;NS)  ←今回追加したアクセス権限(権限はRPWPDTCRRC相当)
S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)


これにてPHP側からの制御で、サービスの開始・終了ができるようになりました。

セキュリティに厳格すぎるというのもこういう時には面倒になるなぁ。

ひと目でわかるMicrosoft Windows Server 2008 (マイクロソフト公式解説書) (マイクロソフト公式解説書)ひと目でわかるMicrosoft Windows Server 2008 (マイクロソフト公式解説書) (マイクロソフト公式解説書)
天野 司

type="text/javascript">
type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">

<< 1 ... 3 4 5 6 7 8 9 10 11 12 13 ... 15 >>

一六社で働くITエンジニアのブログ。

普段はWeb系システム開発と地元のPCサポートをやってます。いつの間にやら会社に8年目。
技術ネタ中心に日々の仕事と生活と趣味やらを気が向いたら書いてます。

2017年3月
 << <   > >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

検索

XMLフィード

16ブログ     powered by b2evolution free blog software