web-dev-qa-db-ja.com

socket.error:[Errno 10013]アクセス許可で禁止されている方法でソケットにアクセスしようとしました

Windows 7でTCP 2.6.5を使用してカスタムPythonスタックを作成し、ポート80で有効なhttpページリクエストをローカルで処理しようとしています。しかし、私はWindows 7がセキュリティを強化しているように見えるものにひっかかった。このコードはVistaで機能しました。

これが私のサンプルコードです。

import SocketServer
import struct

class MyTCPHandler(SocketServer.BaseRequestHandler):
    def handle(self):
        headerText = """HTTP/1.0 200 OK
                        Date: Fri, 31 Dec 1999 23:59:59 GMT
                        Content-Type: text/html
                        Content-Length: 1354"""
        bodyText = "<html><body>some page</body></html>"
        self.request.send(headerText + "\n" + bodyText)

if __name__ == "__main__":
    Host, PORT = "localhost", 80
    server = SocketServer.TCPServer((Host, PORT), MyTCPHandler)
    server.serve_forever()

C:\ python> python TestServer.py トレースバック(最後の最後の呼び出し):
ファイル「TestServer.py」、行19、サーバー= SocketServer.TCPServer((Host、PORT)、MyTCPHandler)ファイル「C:\ Python26\lib\SocketServer.py」、行400、initself.server_bind()ファイル "C:\ Python26\lib\SocketServer.py"、server_bindの411行self.socket.bind(self.server_address )ファイル「」、1行目、バインド

socket.error:[Errno 10013]アクセス許可で禁止されている方法でソケットにアクセスしようとしました

Windows 7でこれを正確に機能させるにはどうすればよいですか?

[2010年5月5日@ 2344 PDTの編集]この answer は、1024よりも低いポートにアクセスする際に、昇格/スーパーユーザー権限が必要なためにエラーが発生することを説明しています。より高いポート番号を使用して、それが機能するかどうかを確認します。ただし、ローカル管理者アカウントがポート80にアクセスできない理由を知りたいです。

28
bitcycle

UACを使用するWindows Vista/7では、管理者アカウントはデフォルトで非特権モードでプログラムを実行します。

プログラムは、管理者として実行する前に、これまでにない使い慣れたUACダイアログで管理者アクセスを要求する必要があります。 Pythonスクリプトは直接実行できないため、[管理者として実行]コンテキストメニューオプションはありません。

ctypes.windll.Shell32.IsUserAnAdmin()を使用して、スクリプトに管理者アクセス権があるかどうかを検出できます。また、sys.argv [0で、python.exeの 'runas'動詞で ShellExecuteEx を使用できます]必要に応じてUACダイアログを表示するパラメーターとして。

18
lunixbochs

同じ問題が発生したばかりで、私のシステムはWin7です。 netstat -na | findstr portのような端末でコマンドを使用するだけで、ポートが使用されていることがわかります。したがって、このメッセージなしでサーバーを起動する場合は、使用されていない他のポートを変更できます。

32
David

マカフィーは私のためにそれをブロックしていました。アクセス保護ルールでプログラムを許可する必要がありました

  1. VirusScanを開く
  2. アクセス保護を右クリックし、プロパティを選択します
  3. 「ウイルス対策標準保護」をクリックします
  4. 「大量メール送信型ワームによるメール送信の防止」ルールを選択し、編集をクリックします
  5. [除外するプロセス]リストにアプリケーションを追加し、[OK]をクリックします

http://www.symantec.com/connect/articles/we-are-unable-send-your-email-caused-McAfee を参照してください

11
frmdstryr

私にとっては、同じポートで別のプロセスが既にリッスンしているときに、Windows 7 x64でそのように不平を言っていました。

実行することにより、現在占有されている(バインドされた)ポートを確認することができます。

netstat -ban
9
kuz8

socket.error:[Errno 10013]アクセス許可で禁止されている方法でソケットにアクセスしようとしました

flaskでこれを得ました:

バインドしようとしているポート既に別のサービスまたはプロセスで使用されている:Eclipse/windowsで開発された私のコードでこれに関するヒントを得ました:

if __name__ == "__main__":
     # Check the System Type before to decide to bind
     # If the system is a Linux machine -:) 
     if platform.system() == "Linux":
        app.run(Host='0.0.0.0',port=5000, debug=True)
     # If the system is a windows /!\ Change  /!\ the   /!\ Port
     Elif platform.system() == "Windows":
        app.run(Host='0.0.0.0',port=50000, debug=True)
4
A.HEDDAR

別のポートでサーバーを実行してみてください。私のために働いた:

python manage.py runserver 127.0.0.1:7000

説明:

Django documentation:

このスクリプトを通常の特権を持つユーザーとして実行する場合(推奨)、低いポート番号でポートを開始するアクセス権がない可能性があります。低いポート番号はスーパーユーザー(root)用に予約されています。

このサーバーは、WSGI_APPLICATION設定で指定されたWSGIアプリケーションオブジェクトを使用します。

本番環境でこのサーバーを使用しないでください。セキュリティ監査やパフォーマンステストは行っていません。 (そして、それは今後も続くでしょう。私たちは、WebサーバーではなくWebフレームワークを作成するビジネスをしているので、実稼働環境を処理できるようにこのサーバーを改善することはDjangoの範囲外です。)

3

Windowsファイアウォールで..\python27\python.exeを許可する必要がありました。 WinXPやWin8でこれを行う必要はありません。

2
Brent Smith

1024を超えるポートで実行するだけで、以下は特権があります。Linuxと同じことです。たとえば、UAC特権エスカレーションのない勝利で5000を使用します。

1
Pythonista

主な問題は、別のアプリケーションで使用されているポート番号です。そのため、以下に示すようにポート番号を未使用のものに変更できます。

Windowsでは、Windowsタスクマネージャーのさまざまなアプリで使用されている使用ポート番号を表示できます。

python manage.py runserver 127.0.0.1:portnumber
Ex: python manage.py runserver 127.0.0.1:8080
0
Thusitha Deepal

ポート80はすでに使用されているようです。システム内の他のアプリケーションで使用されていない他のポートを使用してみてください。

0