socket.error: [Errno 10013] Er is geprobeerd toegang te krijgen tot een socket op een manier die verboden is door de toegangsrechten

Ik probeer een aangepaste TCP-stack te maken met Python 2.6.5 op Windows 7 om geldige http-paginaverzoeken lokaal op poort 80 te leveren. Maar ik ben een probleem tegengekomen met wat lijkt alsof Windows 7 de beveiliging heeft aangescherpt. Deze code werkte op Vista.

Hier is mijn voorbeeldcode:

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 (meest recente oproep als laatste):
Bestand “TestServer.py”, regel 19, in
server = SocketServer.TCPServer((HOST, POORT),
MyTCPHandler) bestand
“C:\Python26\lib\SocketServer.py”,
regel 400, in init
self.server_bind() Bestand “C:\Python26\lib\SocketServer.py”,
regel 411, in server_bind
self.socket.bind(self.server_address)
Bestand “”, regel 1, in bind

socket.error: [Errno 10013] Een poging
is gemaakt om op een bepaalde manier toegang te krijgen tot een stopcontact
verboden door zijn toegangsrechten

Hoe krijg ik dit precies werkend op Windows 7?

[Bewerken op 5/5/2010 @ 2344 PDT] Dit antwoordlegt uit dat de fout wordt veroorzaakt door de noodzaak van verhoogde / superuser-privileges bij toegang tot poorten lager dan 1024. Ik ga proberen een hoger poortnummer te gebruiken om te zien of dat werkt. Ik zou echter nog steeds graag willen weten waarom mijn lokale beheerdersaccount geen toegang heeft tot poort 80.


Antwoord 1, autoriteit 100%

Ik ben net hetzelfde probleem tegengekomen, mijn systeem is Win7. gebruik gewoon het commando op terminal zoals: netstat -na|findstr port, je zult zien dat de poort is gebruikt. Dus als u de server wilt starten zonder dit bericht, kunt u een andere poort wijzigen die niet wordt gebruikt.


Antwoord 2, autoriteit 48%

Op Windows Vista/7, met UAC, voeren beheerdersaccounts standaard programma’s uit in onbevoorrechte modus.

Programma’s moeten om beheerderstoegang vragen voordat ze als beheerder kunnen worden uitgevoerd, met het altijd zo bekende UAC-dialoogvenster. Aangezien Python-scripts niet direct uitvoerbaar zijn, is er geen contextmenu-optie “Als administrator uitvoeren”.

Het is mogelijk om ctypes.windll.shell32.IsUserAnAdmin()te gebruiken om te detecteren of het script beheerderstoegang heeft, en ShellExecuteExmet het werkwoord ‘runas’ op python.exe, met sys.argv[0] als een parameter om indien nodig het UAC-dialoogvenster te openen.


Antwoord 3, autoriteit 46%

Probeer de server op een andere poort te draaien. Werkte voor mij:

python manage.py runserver 127.0.0.1:7000

Uitleg:

zoals vermeld in de Django-documentatie:

Als je dit script uitvoert als een gebruiker met normale rechten (aanbevolen), heb je mogelijk geen toegang om een ​​poort te starten op een laag poortnummer. Lage poortnummers zijn gereserveerd voor de superuser (root).

Deze server gebruikt het WSGI-toepassingsobject gespecificeerd door de WSGI_APPLICATION-instelling.

GEBRUIK DEZE SERVER NIET IN EEN PRODUCTIE-INSTELLING. Het heeft geen beveiligingsaudits of prestatietests ondergaan. (En zo zal het blijven. We maken webframeworks, geen webservers, dus het verbeteren van deze server om een ​​productieomgeving aan te kunnen, valt buiten het bereik van Django.)


Antwoord 4, autoriteit 36%

Voor mij was het zo klagen op Windows 7 x64 terwijl ik al een ander proces op diezelfde poort had staan ​​luisteren.

Het is mogelijk om de momenteel bezette (gebonden) poorten te zien door te starten

netstat -ban

Antwoord 5, autoriteit 24%

McAfee blokkeerde het voor mij. Ik moest het programma toestaan ​​in de toegangsbeveiligingsregels

  1. Open VirusScan
  2. Klik met de rechtermuisknop op Toegangsbeveiliging en kies Eigenschappen
  3. Klik op “Anti-virus standaardbeveiliging”
  4. Selecteer de regel “Voorkom dat wormen voor massamailing e-mail verzenden” en klik op Bewerken
  5. Voeg de toepassing toe aan de lijst Processen om uit te sluiten en klik op OK

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


Antwoord 6, autoriteit 16%

socket.error: [Errno 10013] Er is geprobeerd toegang te krijgen tot een socket op een manier die verboden is door de toegangsrechten

Kreeg dit met flask:

Betekent dat de poort waaraan u probeert te binden, al in gebruik is door een andere service of proces:
kreeg een hint hierover in mijn code ontwikkeld op 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)

Antwoord 7, autoriteit 12%

Je lokale poort wordt gebruikt door een andere app. Ik liep tegen hetzelfde probleem aan!
Je kunt de volgende stap proberen:

  1. Ga naar de opdrachtregel en voer het uit als beheerder!

  2. Type:

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

    TASKKILL /F /PID 4032
    

=> SUCCES: Het proces met PID 4032 is beëindigd.

Opmerking: Mijn lokale poort van 5000 stond vermeld op PID 4032. Geef de jouwe!


Antwoord 8, autoriteit 8%

Loop gewoon op poorten boven 1024 , alles hieronder is bevoorrecht, het is dezelfde deal met Linux, ik gebruik 5000 bijvoorbeeld voor overwinningen zonder enige UAC-priv-escalatie.


Antwoord 9, autoriteit 6%

Het lijkt erop dat poort 80 al in gebruik is. Probeer een andere poort te gebruiken die niet door een andere toepassing in uw systeem wordt gebruikt.


Antwoord 10, autoriteit 4%

Ik moest ..\python27\python.exe toestaan ​​in de Windows-firewall. Ik hoef dit niet te doen op WinXP of Win8.


Antwoord 11, autoriteit 4%

Ik heb dit in Windows 10 opgelost door een uitgaande firewallregel te bewerken.
Klik met de rechtermuisknop op “toestaan” op regel “Blokkeer netwerktoegang voor lokale R-gebruikersaccounts in SQL Server-instantie MSSQLSERVER”

van Windows 10 Firewall - Uitgaande regels - dit is wat mijn instantie blokkeerde

Screenshot van Windows 10 Firewall – Uitgaande regels – dit is wat mijn instantie blokkeerde


Antwoord 12, autoriteit 2%

Het grootste probleem is het poortnummer dat door een andere applicatie wordt gebruikt. U kunt het poortnummer dus wijzigen in een ongebruikt nummer, zoals hieronder weergegeven.

In Windows kun je de gebruikte poortnummers bekijken die door verschillende apps worden gebruikt in Windows Taakbeheer.

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

Antwoord 13, autoriteit 2%

In mijn geval ontdekte ik dat Kaspersky Internet Security 2019 Firewall nettoegang voor python blokkeerde. Het uitschakelen van de firewall werkt soepel. Of het toevoegen van uitzonderingsregels voor de python-app en alle bestandsextensies met *.py zullen ook werken.


Antwoord 14

Toegangsbeveiliging in antivirus uitschakelen,

Ik had hetzelfde probleem toen ik eindelijk de onderstaande logboeken van antivirus vond.

Geblokkeerd door toegangsbeveiligingsregel NT AUTHORITY\SYSTEM C:\WINDOWS\SYSTEM32\SVCHOST.EXE C:\PROGRAM FILES (X86)\MCAFEE\VIRUSSCAN ENTERPRISE\MCCONSOL.EXE Common Standard Protection:Voorkom beëindiging van McAfee-processen Actie geblokkeerd : Beëindigen
Geblokkeerd door poortblokkeringsregel C:\USERS\gebruikersnaam\APPDATA\LOCAL\PROGRAMS\PYTHON\PYTHON37-32\PYTHON.EXE Antivirus Standaardbeveiliging: Voorkomen dat massamailingwormen e-mail verzenden


Antwoord 15

Probeer een andere poort dan 80 te gebruiken


Antwoord 16

Vink in Windows “World Wide Web Publishing Service” aan als deze actief is, want wanneer u IIS installeert, heeft deze een automatische service. start en luistert naar 80, 443 poort.


Antwoord 17

netstat -ano | find ":80"

vervolgens TASKKILL /F /PID 4032

zoals rafee noor zei, maar dit werkt niet als Port wordt gebruikt door SYSTEM

Poort 80 wordt gebruikt door SYSTEEM (PID 4), wat is dat?

of

NET stop HTTP

dit werkt in het bovenstaande geval


Antwoord 18

Hier is een eenvoudige oplossing voor uw probleem..deze fout treedt op vanwege een ander proces of een aantal processen die worden uitgevoerd op de poort waarop u uw app probeert uit te voeren.
Open cmd als beheerder
geef onderstaand commando

netstat -ano | findstr portNo

u kunt een lijst met actieve taken op die poort zien.
je kunt alle onnodige taken sluiten met

taskkill/pid taskNo /F

Als u klaar bent, start u uw server opnieuw op.


Antwoord 19

Ik heb een oplossing gevonden om dit probleem op te lossen in Python.

ga naar c:\python27\ directory en rigtlcick python.exe en tab naar compatibiliteit en selecteer de admin privilege optie en pas de wijzigingen toe. Nu geef je de opdracht waarmee je de socketverbinding kunt maken.

Other episodes