私はCforWindowsで小さなサーバーのようなプログラムを書いています(MinGW / GCCを使用し、Windows 7でテストします)。これは、最終的にLocalSystemアカウントでサービスとして実行されることになっています。ソケットを作成し、Windows Socketsを使用してbind()
、listen()
着信accept()
接続をリッスンしています。コマンドラインから(つまり、サービスとしてではなく、通常のユーザーとして)アプリケーションを実行する場合、外部IPからの接続に問題はありません。ただし、LocalSystemアカウントを使用してプログラムをサービスとして実行すると、自分のPCから、127.0.0.1
またはローカルアドレスを使用してのみサービスに接続できます。192.168.1.80
(私は小さなローカルネットワークのルーターの後ろにいます)。サービスとして実行しなくても問題がなかったとしても、同じローカルネットワーク内の外部IPも他のPCも、私のローカルアドレスを使用して接続することはできません。
LocalSystemまたはLocalServiceとして実行している場合、ネットワークの処理が異なるか、アクセスできない(?)、またはサービスがデスクトップとネットワークの両方に同時にアクセスできない(注:私のサービスはインタラクティブではない)ため、セキュリティ上の考慮事項。基本的に、何が問題になっているのか、サービスの接続をリッスンする方法を見つける必要があります。NetworkServiceとして実行することは、LocalSystemとして実行することと同じですが、ネットワークアクセスを使用しますか?確かに、バックグラウンドサービスとして実行できるサーバーが必要ですが、どのように実行するのでしょうか。
更新:ファイアウォールをオフにする提案は正しい方向に進んでいたようです。Windowsファイアウォールに例外を追加した後、接続を取得できます。ソケットを使用してアプリケーションを通常実行すると、例外を追加するように求めるプロンプトが表示されるため、ファイアウォールについては考えていなかったと思います。これは、サービスを初めて実行するときには発生しません。ルールをファイアウォールに手動で追加するよりも、これを処理するためのより良い方法はありますか?LocalSystemには、ファイアウォール自体にルールを追加する権限がありますか、それともインストール中にこれを行う必要がありますか?