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

时间:2010-05-06 06:12:28

标签: python sockets windows-7 compatibility socketserver

我正在尝试使用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&gt; python TestServer.py   追溯(最近的呼叫最后):
  文件“TestServer.py”,第19行,in          server = 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]此answer解释说,该错误是由访问低于1024的端口时需要提升/超级用户权限引起的。我将尝试使用更高的端口号,看看是否有效。但是,我仍然想知道为什么我的本地管理员帐户无法访问端口80.

14 个答案:

答案 0 :(得分:29)

我刚遇到同样的问题,我的系统是Win7。只需在终端上使用命令,如:netstat -na | findstr port,您将看到该端口已被使用。因此,如果您想在没有此消息的情况下启动服务器,则可以更改未使用的其他端口。

答案 1 :(得分:18)

在Windows Vista / 7上,使用UAC,管理员帐户默认以非特权模式运行程序。

程序必须在以管理员身份运行之前提示管理员访问,并且必须使用不熟悉的UAC对话框。由于Python脚本不能直接执行,因此没有“以管理员身份运行”上下文菜单选项。

可以使用ctypes.windll.shell32.IsUserAnAdmin()来检测脚本是否具有管理员访问权限,并使用python.exe上的'runas'动词ShellExecuteEx,并使用sys.argv [0]作为参数来提示如果需要,可以使用UAC对话框。

答案 2 :(得分:11)

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

  1. 打开VirusScan
  2. 右键单击“访问保护”,然后选择“属性”
  3. 点击&#34;反病毒标准保护&#34;
  4. 选择规则&#34;防止群发邮件蠕虫发送邮件&#34;然后单击编辑
  5. 将应用程序添加到要排除的进程列表,然后单击确定
  6. 请参阅http://www.symantec.com/connect/articles/we-are-unable-send-your-email-caused-mcafee

答案 3 :(得分:4)

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 :(得分:2)

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

答案 5 :(得分:2)

尝试在其他端口上运行服务器。为我工作:

python manage.py runserver 127.0.0.1:7000

说明:

如Django文档所述:

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

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

请勿在生产设置中使用此服务器。它尚未经过安全审核或性能测试。 (这就是要保持的方式。我们的工作是制作Web框架,而不是Web服务器,因此,改进此服务器以使其能够处理生产环境不在Django的范围之内。)

答案 6 :(得分:2)

您的本地端口正在被其他应用使用。我遇到了同样的问题! 您可以尝试执行以下步骤:

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

  2. 类型:

    fun onrefresh(List<>lists){
       this.yourlist=lists   
       notifyDataSetChanged() 
       }
    
  3. 类型:

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
      if(requestCode==yourcode){
         if(resultCode.RESULT_OK){
    
             val data=data.get // you data from here 
            // add this into you list data 
            //than set into adapter
           adapter.onrefresh(yourlist)   
    
          }
        }      
    }
    

=>成功:PID 4032的过程已终止。

注意:PID 4032列出了我的5000个本地端口。您应该给自己!

答案 7 :(得分:1)

只需在高于1024的端口上运行,以下任何内容均享有特权,与Linux相同,我在不使用任何UAC私有升级的情况下使用5000作为胜利。

答案 8 :(得分:1)

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

from Windows 10 Firewall - Outbound rules- this is what was blocking my instance

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

答案 9 :(得分:0)

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

答案 10 :(得分:0)

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

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

python manage.py runserver 127.0.0.1:portnumber
Ex: python manage.py runserver 127.0.0.1:8080

答案 11 :(得分:0)

在我的情况下,我刚刚发现卡巴斯基Internet Security 2019防火墙阻止了python的网络访问。禁用防火墙正常工作。或者为python应用程序添加例外规则,并使用* .py扩展所有文件。

答案 12 :(得分:-1)

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

我最后也遇到了同样的问题,发现防病毒日志如下。

受访问保护规则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阻止防病毒标准保护:防止大量邮件蠕虫发送邮件

答案 13 :(得分:-3)

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

转到c:\ python27 \目录并将pyt.exe和tab选中以进行比较,然后选择admin权限选项并应用更改。现在发出它允许创建套接字连接的命令。