54

我正在尝试在 Windows 7 上使用 Python 2.6.5 创建一个自定义 TCP 堆栈,以在本地端口 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 Traceback(最近一次调用最后):
文件“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、在绑定

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 回答
23

尝试在不同的端口上运行服务器。为我工作:

python manage.py runserver 127.0.0.1:7000

解释:

如 Django 文档中所述:

如果您以具有普通权限(推荐)的用户身份运行此脚本,您可能无权在低端口号上启动端口。低端口号是为超级用户(root)保留的。

此服务器使用 WSGI_APPLICATION 设置指定的 WSGI 应用程序对象。

请勿在生产环境中使用此服务器。它没有经过安全审计或性能测试。(这就是它会一直存在的方式。我们的业务是制作 Web 框架,而不是 Web 服务器,因此改进此服务器以使其能够处理生产环境超出了 Django 的范围。)

于 2019-03-04T08:31:33.447 回答
18

对我来说,当我有另一个进程已经在同一个端口上侦听时,它就像在 Windows 7 x64 上一样抱怨。

可以通过运行查看当前占用(绑定)的端口

netstat -ban
于 2015-09-19T23:42:40.797 回答
12

迈克菲为我阻止了它。我必须在访问保护规则中允许该程序

  1. 打开病毒扫描
  2. 右键单击访问保护并选择属性
  3. 点击“防病毒标准保护”
  4. 选择规则“防止群发邮件蠕虫发送邮件”并点击编辑
  5. 将应用程序添加到要排除的进程列表中,然后单击确定

请参阅http://www.symantec.com/connect/articles/we-are-unable-send-your-email-caused-mcafee

于 2014-08-15T17:58:38.807 回答
8

socket.error: [Errno 10013] 试图以访问权限禁止的方式访问套接字

用烧瓶得到这个:

意味着您尝试绑定的端口已被另一个服务或进程使用:在我在 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)
于 2017-07-31T10:11:05.720 回答
6

您的本地端口正在被另一个应用程序使用。我遇到了同样的问题!您可以尝试以下步骤:

  1. 转到命令行并以管理员身份运行它!

  2. 类型:

    netstat -ano | find ":5000"
    => TCP    0.0.0.0:5000           0.0.0.0:0              LISTENING       4032
       TCP    [::]:5000              [::]:0                 LISTENING       4032
    
  3. 类型:

    TASKKILL /F /PID 4032
    

=> SUCCESS:PID 4032 的进程已终止。

注意:我的 5000 本地端口由 PID 4032 列出。你应该给你的!

于 2020-03-16T04:40:07.850 回答
4

只需在 1024 以上的端口上运行,以下任何内容都是特权,它与 Linux 的处理相同,例如,我在没有任何 UAC priv 升级的情况下使用 5000。

于 2018-09-25T20:22:06.370 回答
3

似乎端口 80 已在使用中。尝试使用系统中任何其他应用程序未使用的其他端口。

于 2019-01-19T18:16:51.490 回答
2

我必须在 Windows 防火墙中允许 ..\python27\python.exe 。我不需要在 WinXP 或 Win8 上执行此操作。

于 2013-10-12T23:02:16.633 回答
2

我通过编辑出站防火墙规则在 Windows 10 上解决了这个问题。右键单击规则“阻止 SQL Server 实例 MSSQLSERVER 中 R 本地用户帐户的网络访问”上的“允许”

来自 Windows 10 防火墙 - 出站规则 - 这就是阻止我的实例的原因

Windows 10 防火墙的屏幕截图 - 出站规则 - 这就是阻止我的实例的原因

于 2020-03-07T05:22:02.207 回答
1

主要问题是另一个应用程序使用的端口号。因此您可以将端口号更改为未使用的端口号,如下所示。

在 windows 中,您可以在 windows 任务管理器中查看不同应用程序使用的端口号。

python manage.py runserver 127.0.0.1:portnumber
Ex: python manage.py runserver 127.0.0.1:8080
于 2019-04-25T05:00:35.523 回答
1

我刚刚在我的案例中发现卡巴斯基安全软件 2019 防火墙阻止了 python 的网络访问。禁用防火墙工作顺利。或者为 python 应用程序和所有带有 *.py 的文件扩展名添加例外规则也将起作用。

于 2020-05-15T14:38:35.217 回答
0

在防病毒软件中禁用访问保护,

我遇到了同样的问题,最后从防病毒软件中找到了以下日志。

被访问保护规则阻止 NT AUTHORITY\SYSTEM C:\WINDOWS\SYSTEM32\SVCHOST.EXE C:\PROGRAM FILES (X86)\MCAFEE\VIRUSSCAN ENTERPRISE\MCCONSOL.EXE 通用标准保护:阻止 McAfee 进程终止操作被阻止:终止被阻止通过端口阻止规则 C:\USERS\username\APPDATA\LOCAL\PROGRAMS\PYTHON\PYTHON37-32\PYTHON.EXE 杀毒标准保护:防止群发邮件蠕虫发送邮件

于 2019-08-12T18:17:24.223 回答
0

尝试使用与 80 不同的端口

于 2021-12-20T15:10:45.693 回答
0

在 Windows 中检查“万维网发布服务”是否正在运行,因为当您安装 IIS 时,它有一个自动服务。启动并监听 80、443 端口。

于 2021-12-28T08:52:51.743 回答
0
netstat -ano | find ":80"

然后TASKKILL /F /PID 4032

正如 rafee noor 所说,但是当 SYSTEM 使用端口时,这不起作用

SYSTEM(PID 4)正在使用端口80,那是什么?

或者

NET stop HTTP

这适用于上述情况

于 2022-01-13T04:35:29.020 回答
0

这是您问题的简单解决方案。此错误是由于另一个进程或在您尝试运行应用程序的端口上运行的一堆进程而发生的。 以管理员身份打开 cmd 如果您将服务器设置为 SERVICE 并且服务中断,也可能会发生这种情况。给出以下命令

netstat -ano | findstr portNo

您将能够看到该端口上的活动任务列表。您可以使用关闭所有不必要的任务

taskkill/pid taskNo /F

完成后重新启动您的服务器。

于 2022-01-21T09:27:59.460 回答
-3

我在 Python 中找到了解决此问题的解决方案。

转到 c:\python27\ 目录和 rigtlcick python.exe 和选项卡以兼容并选择管理员权限选项并应用更改。现在您发出它允许创建套接字连接的命令。

于 2014-11-09T15:18:42.987 回答