mirror of
https://github.com/moonlight-stream/Internet-Hosting-Tool.git
synced 2025-07-03 08:15:40 +00:00
Ensure IPv6 PCP requests come from the correct address by explicitly binding
This commit is contained in:
parent
5325a57e20
commit
5aea5aedab
15
miss/pcp.cpp
15
miss/pcp.cpp
@ -131,7 +131,17 @@ bool PCPMapPort(PSOCKADDR_STORAGE localAddr, int localAddrLen, PSOCKADDR_STORAGE
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is safe for SOCKADDR_IN and SOCKADDR_IN6
|
if (localAddr->ss_family == AF_INET6) {
|
||||||
|
// Make sure we're sourcing from the correct IPv6 address to ensure the port
|
||||||
|
// is opened correctly and that the PCP server doesn't refuse our mapping.
|
||||||
|
((PSOCKADDR_IN6)localAddr)->sin6_port = 0;
|
||||||
|
if (bind(sock, (struct sockaddr*)localAddr, localAddrLen) == SOCKET_ERROR) {
|
||||||
|
printf("bind() failed: %d\n", WSAGetLastError());
|
||||||
|
closesocket(sock);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
((PSOCKADDR_IN)pcpAddr)->sin_port = htons(5351);
|
((PSOCKADDR_IN)pcpAddr)->sin_port = htons(5351);
|
||||||
if (connect(sock, (struct sockaddr*)pcpAddr, pcpAddrLen) == SOCKET_ERROR) {
|
if (connect(sock, (struct sockaddr*)pcpAddr, pcpAddrLen) == SOCKET_ERROR) {
|
||||||
printf("connect() failed: %d\n", WSAGetLastError());
|
printf("connect() failed: %d\n", WSAGetLastError());
|
||||||
@ -221,6 +231,9 @@ bool PCPMapPort(PSOCKADDR_STORAGE localAddr, int localAddrLen, PSOCKADDR_STORAGE
|
|||||||
case 1: // UNSUPP_VERSION
|
case 1: // UNSUPP_VERSION
|
||||||
printf("UNSUPPORTED\n");
|
printf("UNSUPPORTED\n");
|
||||||
break;
|
break;
|
||||||
|
case 2: // NOT_AUTHORIZED
|
||||||
|
printf("UNAUTHORIZED\n");
|
||||||
|
break;
|
||||||
case 11: // CANNOT_PROVIDE_EXTERNAL
|
case 11: // CANNOT_PROVIDE_EXTERNAL
|
||||||
printf("CONFLICT\n");
|
printf("CONFLICT\n");
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user