socket.error: [Errno 10013] 试图以访问权限禁止的方式访问套接字
Posted
技术标签:
【中文标题】socket.error: [Errno 10013] 试图以访问权限禁止的方式访问套接字【英文标题】:socket.error: [Errno 10013] An attempt was made to access a socket in a way forbidden by its access permissions 【发布时间】:2011-02-16 06:08:12 【问题描述】:我正在尝试在 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 回溯(最近一次通话最后一次): 文件“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 上运行?
[Edit on 5/5/2010 @ 2344 PDT] 这个answer 解释说这个错误是由于访问低于 1024 的端口时需要提升/超级用户权限引起的。我将尝试使用更高的端口号码,看看是否有效。但是,我还是想知道为什么我的本地管理员帐号无法访问 80 端口。
【问题讨论】:
您的本地管理员帐户可能无法绑定到端口 80,因为已经绑定了另一个进程(服务器)。telnet 127.0.0.1 80
将快速显示端口 80 是否已绑定。
@msw 那应该给出一个不同的错误。
@msw/大家注意a telnet client isn't installed on Win7 by default.
【参考方案1】:
我刚遇到同样的问题,我的系统是Win7。只需在终端上使用命令,例如:netstat -na|findstr port,您将看到该端口已被使用。因此,如果您想在没有此消息的情况下启动服务器,您可以更改其他未使用的端口。
【讨论】:
我在 Win8 上就是这种情况 我也可以通过在 Win8 中更改应用程序端口来解决此错误 或停止/更改正在使用其他端口的进程。查找哪个进程的多种方法:***.com/questions/48198/… 添加了 python.exe,现在可以在 windows powershell 中运行我的代码。谢谢!【参考方案2】:在 Windows Vista/7 上,使用 UAC,管理员帐户默认以非特权模式运行程序。
程序必须在以管理员身份运行之前提示管理员访问权限,并使用非常熟悉的 UAC 对话框。由于 Python 脚本不能直接执行,因此没有“以管理员身份运行”上下文菜单选项。
可以使用ctypes.windll.shell32.IsUserAnAdmin()
检测脚本是否具有管理员权限,ShellExecuteEx
在 python.exe 上使用 'runas' 动词,使用 sys.argv[0] 作为参数来提示 UAC 对话框,如果需要。
【讨论】:
在运行ctypes.windll.shell32.IsUserAnAdmin()
之前确保你import ctypes
【参考方案3】:
尝试在不同的端口上运行服务器。为我工作:
python manage.py runserver 127.0.0.1:7000
解释:
如 Django 文档中所述:
如果您以具有普通权限的用户身份运行此脚本(推荐),您可能无权在低端口号上启动端口。为超级用户 (root) 保留低端口号。
此服务器使用由 WSGI_APPLICATION 设置指定的 WSGI 应用程序对象。
请勿在生产环境中使用此服务器。它没有经过安全审计或性能测试。 (这就是它会一直存在的方式。我们的业务是制作 Web 框架,而不是 Web 服务器,因此改进此服务器以使其能够处理生产环境超出了 Django 的范围。)
【讨论】:
@Armali 我希望这提供了一个合理的解释【参考方案4】:对我来说,当我有另一个进程已经在同一个端口上侦听时,它就像在 Windows 7 x64 上一样抱怨。
可以通过运行查看当前占用(绑定)的端口
netstat -ban
【讨论】:
【参考方案5】:McAfee 为我阻止了它。我必须在访问保护规则中允许该程序
-
打开病毒扫描
右键单击访问保护并选择属性
点击“防病毒标准保护”
选择规则“防止群发邮件蠕虫发送邮件”并点击编辑
将应用程序添加到要排除的进程列表中,然后单击确定
见http://www.symantec.com/connect/articles/we-are-unable-send-your-email-caused-mcafee
【讨论】:
感谢人救了我的命,我在过去 2 天里被卡住了,做了很多改变,但从这个解决方案中工作了【参考方案6】: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)
【讨论】:
看看这里:answers.microsoft.com/en-us/windows/forum/windows_7-networking/…【参考方案7】:您的本地端口正被另一个应用程序使用。我遇到了同样的问题! 您可以尝试以下步骤:
转到命令行并以管理员身份运行!
类型:
netstat -ano | find ":5000"
=> TCP 0.0.0.0:5000 0.0.0.0:0 LISTENING 4032
TCP [::]:5000 [::]:0 LISTENING 4032
类型:
TASKKILL /F /PID 4032
=> SUCCESS:PID 4032 的进程已终止。
注意:我的 5000 本地端口由 PID 4032 列出。你应该给你的!
【讨论】:
【参考方案8】:只需在 1024 以上的端口上运行,下面的任何内容都是特权,它与 Linux 相同,例如,我在没有任何 UAC priv 升级的情况下使用 5000。
【讨论】:
【参考方案9】:似乎端口 80 已在使用中。尝试使用系统中任何其他应用程序未使用的其他端口。
【讨论】:
【参考方案10】:我必须在 Windows 防火墙中允许 ..\python27\python.exe。我不需要在 WinXP 或 Win8 上这样做。
【讨论】:
【参考方案11】:我通过编辑出站防火墙规则在 Windows 10 上解决了这个问题。 右键单击规则“阻止 SQL Server 实例 MSSQLSERVER 中 R 本地用户帐户的网络访问”上的“允许”
Windows 10 防火墙的屏幕截图 - 出站规则 - 这就是阻止我的实例的原因
【讨论】:
【参考方案12】:主要问题是另一个应用程序使用的端口号。因此您可以将端口号更改为未使用的端口号,如下所示。
在windows中你可以在windows任务管理器中查看不同应用程序使用的端口号。
python manage.py runserver 127.0.0.1:portnumber
Ex: python manage.py runserver 127.0.0.1:8080
【讨论】:
"在windows中,您可以在windows任务管理器中查看不同应用程序使用的端口号。"我看不见他们。请仔细检查并提供说明。【参考方案13】:我刚刚发现卡巴斯基安全软件 2019 防火墙阻止了 python 的网络访问。禁用防火墙工作顺利。或者为 python 应用程序和所有带有 *.py 的文件扩展名添加例外规则也将起作用。
【讨论】:
能否请您提供更具体的信息,并告诉我如何添加更多规则?因为我查过,蟒蛇是卡巴斯基真实的。【参考方案14】:在防病毒软件中禁用访问保护,
我遇到了同样的问题,最后从防病毒软件中找到了以下日志。
被访问保护规则阻止 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 杀毒标准防护:防止群发邮件蠕虫发送邮件
【讨论】:
【参考方案15】:尝试使用与 80 不同的端口
【讨论】:
【参考方案16】:我在 Python 中找到了解决此问题的解决方案。
转到 c:\python27\ 目录并设置 python.exe 和选项卡以兼容并选择管理员权限选项并应用更改。现在你发出它允许创建套接字连接的命令。
【讨论】:
这是不安全的,因为它以管理员权限运行 所有 Python 脚本。此外,这个问题多年来一直有一个公认的答案。以上是关于socket.error: [Errno 10013] 试图以访问权限禁止的方式访问套接字的主要内容,如果未能解决你的问题,请参考以下文章
selenium:socket.error: [Errno 61] 连接被拒绝
Python 处理 socket.error:[Errno 104] 连接由对等方重置
python绑定socket.error:[Errno 13]权限被拒绝
socket.error:[errno 99] 无法在 python 中分配请求的地址和命名空间