54

ポート 80 でローカルに有効な http ページ要求を処理するために、Windows 7 で Python 2.6.5 を使用してカスタム TCP スタックを作成しようとしています。しかし、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 行目、init self.server_bind() ファイル内 "C:\Python26\lib\SocketServer.py"、411 行目、server_bind self.socket.bind(self.server_address) ファイル内 ""、1 行1、バインド中

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

これを Windows 7 で動作させるにはどうすればよいですか?

[2010 年 5 月 5 日 @ 2344 PDT で編集] この回答では、1024 未満のポートにアクセスする際に、昇格された / スーパーユーザー権限が必要なためにエラーが発生することが説明されています。動作します。ただし、ローカル管理者アカウントがポート 80 にアクセスできない理由を知りたいです。

4

19 に答える 19

50

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

于 2013-02-18T02:11:40.410 に答える
25

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

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

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

于 2010-05-06T07:40:35.773 に答える
12

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

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

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

于 2014-08-15T17:58:38.807 に答える
0
netstat -ano | find ":80"

それからTASKKILL /F /PID 4032

rafee noor が言ったように、ポートがシステムによって使用されている場合、これは機能しません

ポート 80 が SYSTEM (PID 4) によって使用されていますが、これは何ですか?

また

NET stop HTTP

これは上記の場合に機能します

于 2022-01-13T04:35:29.020 に答える
-3

Pythonでこの問題を解決する解決策を見つけました。

c:\python27\ ディレクトリに移動し、python.exe を rigtlcick してタブで互換性を確認し、管理者権限オプションを選択して変更を適用します。ここで、ソケット接続を作成できるコマンドを発行します。

于 2014-11-09T15:18:42.987 に答える