1. ホーム
  2. python

[解決済み] 要求されたアドレスは、そのコンテキストでは有効ではありません。

2022-01-31 18:26:33

質問内容

Black Hat Python"というチュートリアルを追っていたところ、"the requested address is not valid in its context"というエラーが発生しました。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ソケットのエラーコード ドキュメント :

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

要求されたアドレスは、そのコンテキストでは有効ではありません。これは通常、ローカルコンピュータで有効でないアドレスにバインドしようとした場合に発生します。

それは、ルーターがNAT(ネットワークアドレス変換)を使ってあなたのコンピューターと話す前に聞いているIPアドレスかもしれませんが、あなたのコンピューターがそのIPアドレスを全く見ていないということではありません。

にバインドするか 0.0.0.0 この場合、利用可能なすべてのIPアドレス(localhostと設定されているパブリックアドレスの両方)が使用されます。

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 .