WinSock2についての質問

このQ&Aのポイント
  • WinSock2の仕様が理解できません。クライアントからサーバに接続し、サーバ側の情報を取得することは可能でしょうか?
  • もしもそれが不可能な場合、クライアントとサーバ側で別々のプログラムを作成して通信をする方法はありますか?
  • セキュリティ上の問題のため、リモート操作に使える方法を探していますが、WMIやVBSなどでも問題があります。
回答を見る
  • ベストアンサー

winsock2について

すみません。教えてください。 [内容] WinSock2の仕様がいまいちわかりませんので、教えていただきたいのですが、たとえば、クライアントからサーバに接続して、サーバ側のexeファイルを実行し、サーバ側の情報を取得する。というようなことは出来るのでしょうか? もし、出来ないのあれば、 クライアント側にA.exeを作成 サーバ側B.exeを作成 し、B.exeは常に常駐とし、A.exeから送信した内容をB.exeで受信して、それをキーとし、B.exe実行する。クライアントからサーバ側でB.exeを実行するにはこの方法しかないのでしょうか? リモート操作がしたいのですが、いろいろ調べても(WMI、VBS)セキュリティ上どれも問題あるので....

質問者が選んだベストアンサー

  • ベストアンサー
  • suzui
  • ベストアンサー率67% (199/297)
回答No.1

リモート操作なら、telnetするとかターミナルサービス(リモートデスクトップ接続)を使うとかじゃだめなんですか? 確かにそういう仕様のsocketアプリケーションを書けば何だってできるでしょうが、見方を変えればそれもセキュリティホールになるでしょう。 リモートでコードを実行するためだけに、いちいちsocketインタフェースを使って開発するのも効率的とはいえないでしょう。 リモートでコードを実行するための仕組みはいろいろ用意されているはずですが・・・ RPCとかDCOMとか、 JavaのRMIでもいいですし、 IISでCGIプログラムを起動してもいいでしょうし。 .NET Remotingでもいいでしょう。 ほかにもいろいろあると思います。

poposan
質問者

補足

ご回答ありがとうございます。 >リモート操作なら、telnetするとかターミナルサービス(リモートデスクトップ接続)を使うとかじゃだめなんですか? は一様考えています。が、最終的に出来ないときの仕様にしてます。 >リモートでコードを実行するためだけに、いちいちsocketインタフェースを使って開発するのも効率的とはいえないでしょう。 私もそう思います。 >リモートでコードを実行するための仕組みはいろいろ用意されているはずですが・・・ RPCとかDCOMとか、 掲示板に乗せていない理由がありました。 設定等をなるべくしないで、EXEだけで解決したかったのです。 環境がwindowsNTなので....

関連するQ&A

  • 現在WINSOCKコントロールを用いて通信プログラムを作成しています

    現在WINSOCKコントロールを用いて通信プログラムを作成しています サーバ側の設定が IP:192.168.1.10 Port:10000のとき、 Winsock.state = 7(Listen状態) クライアント側で Winsock.Close Winsock.RemoteHost = "192.168.1.10" Winsock.RemotePort = 10000 Winsock.Connect で実行したときにエラー10061で返ってきます。 NETSTAT -anで他にこのポートを使用ものは有りませんでした どのようにすればエラーが回避できますでしょうか?

  • Winsock 受信について

    Winsockをサーバとクライアントで動かして送受信についてです。 サーバでSendDataで送信、クライアントでGetDataの所です。 サーバーでSendDataを数回送信するとクライアントのGetDataではある程度まとめて受信します。 (1)サーバ側で送信    Winsock.SendData "aaaaa"    Winsock.SendData "bbbbb"    Winsock.SendData "ccccc"    Winsock.SendData "ddddd" (2)クライアントで受信    Winsock.GetData xyz (1)のように送信した場合、(2)のxyzは    ・aaaaabbbbbcc    ・cccddddd のように数回に分けて受信されます。 希望としましては、1データ送信に対して1データ受信が望ましいのですが。 実際のデータには全角はある為、このような希望となりました。 もしかして、不可能なのでしょうか。 わかる方、教えて下さい。

  • winsockについて

    winsock、非同期モードでTCP/IP通信を行うようなプログラムを作成しています。 通常の同期モードでのプログラムは完成させることができました。 そこで、クライアント側を非同期モードにし、受信バッファにデータが入ったら受信するというようなプログラムにしたのですが、どうもうまく動作してくれません。 やはりサーバー側も非同期モードにしなければならないのですか?? どなたかご教授お願いします。

  • VBSからbat実行(WMI)して戻り値を取得する

    WSH初心者です。 WSH(remote.vbs)からWMI使用で別サーバのA.batを実行しているのですが、 A.batの戻り値はどのように取得すれば良いのでしょうか? -■remote.vbs(一部抜粋)------------------------------------------ ' #WMI に接続 Wim32_Process クラスを取り出す Set clsProcess = GetObject("winmgmts:{impersonationLevel=impersonate}" & "!" & リモート先PC & "Win32_Process") ' #プロセスの作成 lngResult = clsProcess.Create(A.bat, null, null, processId) -------------------------------------------------------------- -■A.bat------------------------------------------ exit /B %RetCode% ------------------------------------------------- A.batで返している%RetCode%の値をremote.vbs側で取得したいのです。 どなたかご存じでしたらご教授の程よろしくお願い致します。

  • UDP/IPでのソケット作成について(winsock)

    UDP/IPでのソケット作成について(winsock) 開発環境VC++.NET、O/S WIN2000にてソケットプログラミング(winsock2.0)をしています。 コンソールプログラミングではありませんが、WindProcは持っていません。 UDPサーバーを作り、複数クライアントの対応をしたいと考えています。 クライアントAからの通信やりとり中に クライアントBからの通信がきたら、そちらとも通信やりとりを(自動で)行いたい。 ここで問題なのが、クライアントAの要求ポートが15000で、 クライアントBの要求ポートも15000なのです。 同じ既に開いているポートでソケット作成しようとしても、socket()関数はエラーを返してくるのですが、 やり方を工夫すれば、同一ポートでの複数クライアント対応は可能なのでしょうか。不可能なのでしょうか。 可能であれば、やり方、ヒント等教えてください。よろしくお願いします。 追記 (1)TCP/IPでは、同一ポートでソケット作成が可能でした。ネットで探したサンプルプログラムが  そのような動きをしていたのですが、UDPに書換えることはできませんでした。  http://eternalwindows.jp/network/winsock/winsock04s.html (2)UNIXの場合fork()処理後に socket()作成 → bind()で同一ポートでの複数クライアント対応が  上手くいくらしいのですが、Windowsではマルチスレッド等をうまく活用すれば、  fork()と同様の処理が可能になり、目的が達成できるでしょうか。

  • WinSockのソケットからウィンドウへのメッセージで・・・

    こんばんは、このたびWinSockを用いたネットワークゲームを作成しようと考えたのですが、サーバー側がクライアントの接続ごとにソケットを立て、そのメッセージをすべて同じウィンドウへ返すようにしているのですが、それではどのソケットからメッセージが来たのか分からず、どのソケットをレシーブすればいいのか分かりません。 こういう場合の有効的な手段って何かないですか? 分かりにくい質問ですみません。どなたかお願いしますm(_ _)m

  • winsock通信時エラーの回避

    winsock通信でデータをクライアント側からサーバー側に送り、一定の条件でサーバー側からクライアント側にデータを戻すソフトを作成中なのですが、サーバー側が通信エラーの為か止まってしまいます。 サーバー側(winsock部分)記述 Private Sub Winsock1_Error(Index As Integer, ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) Winsock1(Index).Close '接続を閉じる Do While Not (Winsock1(Index).State = sckClosed) DoEvents Loop On Error Resume Next Winsock1(Index).Listen If Winsock1(Index).LocalPort <> 0 Then Winsock1(Index).LocalPort = 0 End If End Sub 質問の整理ですが、 表示板にはギミックが付いておりそのギミックは止まらないのでパソコンのフリーズでは無い様子です。 で問題は通信部分だと推測されるのですが、そのエラーを起こした通信を破棄してもいいので、サーバー側の点数加算を止めない方法はありませんでしょうか。 また上記のWinsock1_Errorコードの記述じゃおかしいのでしょうか。

  • VB6.0 Winsockについての質問です。

    VB6.0 Winsockについての質問です。 はじめまして。 現在、VB6.0を使用してTCP通信にてテキストデータを送るプログラムを作成しています。 機能としては全て完成しているのですが、現在再接続ができないじょうたいです。 PC上にサーバプログラムとクライアントプログラムを立ち上げます。 localport は 0 として設定しており、 host は、localhostとしています。 remortportは5000を設定しております。 現段階で発生している問題として、 クライアント側にてConnectイベントをさせ、 サーバ側にて、ConnectionRequestイベントが発生します。 クライアント側にて、Closeイベントは発生させ、 サーバー側も切断を確認します。 この状態でクライアント側から再度Connectイベントを発生させても サーバ側にてConnectionRequestイベントが発生しません。 サーバ側のプログラム一度終了させ、もう一度起動させると また、接続が可能になります。 もう、2日以上悩んでいるのですが、、、解決できません。 どなたか、詳しい方がいらっしゃいましたらご教授お願いします。

  • サーバ側とクライアント側で共通の内容の環境変数ってありますか?

    サーバ側とクライアント側で共通の内容。。 例えば、WebへのLoginユーザなどは、サーバ側では、 REMOTE_USERで受け取れると思うのですが、 クライアント側でもWebへのLOGINの情報が、VBで取得できるような環境変数とかに、入っているのでしょうか? やりたいことは、サーバ側で、クライアント個別のファイルを作成して、クライアント側に保存されているEXEで、そのファイルにアクセス したいと思っております。 その場合、クライアントのEXEが取得できるような環境変数は あるのでしょうか? 例) クライアント  aiueo(WebへのLogin) ・・・(1)      ↓    サーバ   aiueo・・・(REMOTE_USERで取得)         (サーバ側でaiueo.txt作成し、URLで          クライアントのTEST.EXEを指定したWeb          ページを作成)      ↓      クライアント TEST.EXEは実行できます         aiueo.txt←((1)のLoginがクライアントの                TEST.EXE[VB]で取得               することは可能ですか?) ※サーバとクライアントで同じ内容を見れるものであれば、  どんなものでも結構です。  教えてください。 説明がわかりづらくて済みません。

  • VC++2008Expressでwin32appとwinsockの勉強

    VC++2008Expressでwin32appとwinsockの勉強の為にネットワークゲームを作ろうと思ってます。 winsockについて色々調べているうちに、疑問がわいたので質問します。 実現したいのは、サーバーとクライアントが1:Nのネットワークゲームです。 プレイヤーはサーバーに接続し、部屋に入ります。 誰かが初めて部屋に入ったら、サーバー側で部屋を用意します。(複数の部屋が立つこともあります) サーバー側で用意された部屋は、タイマーのイベントで部屋の状況データが変ります。 また、部屋にいるプレイヤーがアクションを起こす度に、サーバーの状況データが変ります。 その状況データを部屋に居る1人以上のプレイヤーで参照し共有します。 またプレイヤーデータはサーバー側で全部を一括管理します。 このような、プログラムを作りたいと思ってるんですが、 例えばサーバー側でwinsockは待ちうけ(accept)の所でプログラムは止まってしまいますよね。 クライアント側では受信(recv)の所で止まりますよね。 サーバー側やクライアント側で通信を待ち受けながら、 タイマーやマウスクリックに対するイベント処理を同時に行うことは可能なんでしょうか。 出来るとしたら、どのような仕組みにする必要があるでしょうか。 よろしくお願いします。m(_ _)m