web-dev-qa-db-ja.com

要求されたアドレスは、コンテキストエラーで無効です

「BlackHatPython」というチュートリアルに従っていたところ、「要求されたアドレスはそのコンテキストでは無効です」というエラーが発生しました。私はPython IDEバージョン:2.7.12これは私のコードです:

import socket
import threading

bind_ip = "184.168.237.1"
bind_port = 21

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

server.bind((bind_ip,bind_port))

server.listen(5)

print "[*] Listening on %s:%d" % (bind_ip,bind_port)

def handle_client(client_socket):

    request = client_socket.rev(1024)

    print "[*] Recieved: %s" % request

    client_socket.close()

while True:

    client,addr = server.accept()

    print "[*] Accepted connection from: %s:%d" % (addr[0],addr[1])

    client_handler = threading.Thread(target=handle_client,args=(client,))
    client_handler.start()

そしてこれは私のエラーです:

Traceback (most recent call last):
  File "C:/Python34/learning hacking.py", line 9, in <module>
    server.bind((bind_ip,bind_port))
  File "C:\Python27\lib\socket.py", line 228, in meth
    return getattr(self._sock,name)(*args)
error: [Errno 10049] The requested address is not valid in its context
>>> 

ネットワークインターフェイスに実際に割り当てられていないIPアドレスにバインドしようとしています。

bind_ip = "184.168.237.1"

Windows Socketsエラーコードドキュメント を参照してください:

[〜#〜] wsaeaddrnotavail [〜#〜]10049
要求されたアドレスを割り当てることができません。

要求されたアドレスは、そのコンテキストでは無効です。これは通常、ローカルコンピューターで無効なアドレスにバインドしようとしたことが原因です。

これは、ルーターがNAT(ネットワークアドレス変換)を使用してコンピューターと通信する前にリッスンしているIPアドレスである可能性がありますが、コンピューターがそのIPアドレスをまったく認識しているわけではありません。

0.0.0.0にバインドします。これにより、使用可能なすべてのIPアドレス(ローカルホストと構成済みのパブリックアドレスの両方)が使用されます。

bind_ip = "0.0.0.0"

または、コンピューターが構成されている任意のアドレスを使用します。コンソールでipconfig /allを実行して、ネットワーク構成を確認します。

また、1024未満のポートは使用したくないでしょう。これらは、rootとしてのみ実行されるプロセス用に予約されています。特権のないプロセスを実行する場合は、それよりも大きい数を選択する必要があります(そして、ほとんどのチュートリアルプログラムでは、まさにそれが必要です)。

port = 5021  # arbitrary port number higher than 1023

あなたがフォローしている特定のチュートリアルでは、BIND_IP = '0.0.0.0'BIND_PORT = 9090を使用していると思います。

6
Martijn Pieters