Windows が『192.168.00.1』を解釈できない真相が15年以上前からあるバグだと判明
Microsoft製 RDP 6.3クライアントは『192.168.00.1』を解釈できないことが発覚
真相が判明
https://twitter.com/a1lic/status/846624969660366849/photo/1
『GetAddrInfoWから戻った後のraxの値、0x2AF9(11001)はWSAHOST_NOT_FOUNDなので、変な書き方のIPアドレスをちゃんと解釈できていない。』
|。・ω・) なんですと?
char *hostname = "192.168.00.1"; char *service = "http"; struct addrinfo hints, *res0, *res; hints.ai_socktype = SOCK_STREAM; hints.ai_family = PF_UNSPEC; int err; int sock; WSADATA wsaData; WSAStartup(2 , &wsaData); memset(&hints, 0, sizeof(hints)); getaddrinfo = (GETADDRINFO)GetProcAddress( module, "getaddrinfo" ); if ((err = getaddrinfo(hostname, service, &hints, &res0)) != 0) { printf("error %d\n", err); return 1; } for (res=res0; res!=NULL; res=res->ai_next) { sock = socket(res->ai_family, res->ai_socktype, res->ai_protocol); if (sock < 0) { continue; } printf("error %d.%d.%d.%d\n",(BYTE)res->ai_addr->sa_data[2],(BYTE)res->ai_addr->sa_data[3],(BYTE)res->ai_addr->sa_data[4],(BYTE)res->ai_addr->sa_data[5]); } return 0; |
Windows 2000でも試してみた。
ANSI版もダメっぽ
つまり、10年以上前からあるバグですね
その書き方って仕様には定まってなくて、八進数で解釈するか、十進数で解釈するかも実装によって違うものという認識だった
まあ00の場合どうみても0だが
その書き方って仕様には定まってなくて、八進数で解釈するか、十進数で解釈するかも実装によって違うものという認識だった
まあ00の場合どうみても0だが