우분투 16.04.2 LTS를 실행하는 Azure 가상 머신에서 coturn 서버를 실행하고 있습니다. 나는 C#으로 TURN 클라이언트를 구현 중이고 서버 구성의 문제, 서버 소프트웨어의 버그 또는 클라이언트의 인코딩 문제라고 생각하고 있습니다.길이가 4로 나눌 수있는 경우 Coturn 문자열 값만 허용됩니다.
나는 처음으로 서버에서 REALM
을받을 때 문제를 발견했습니다. 영역 이름은 9 자 였지만 서버에서 NULL
자를 추가로 3 개 계속 받았습니다. 내가 보내던 소프트웨어 버전을 변경하려고 할 때 나의 의심이 확인되었다. 길이가 4로 나눌 수없는 경우 서버는 아무 것도 반환하지 않습니다. 이제 알 수없는 특성으로 폐기를 처방하는 적절한 STUN/TURN 사양에 따라 메시지가 자동으로 삭제됩니다.
01-13-00-40-21-12-A4-42-57-9E-20-40-86-81-34-F9-B0-64-C1-E4-00-09-00-10-00-00-04-01-55-6E-61-75-74-68-6F-72-69-7A-65-64-00-15-00-10-39-64-38-35-62-66-61-66-62-63-34-36-30-62-31-66-00-14-00-09-74-65-73-74-72-65-61-6C-6D-00-00-00-80-22-00-04-4E-6F-6E-65
내가 사양을 사용하고
을 얻을 구문 분석 : 사양 당 , 나는private void StoreString(AttributeType key, string v, byte[] msg, ref int offset)
{
byte[] stringBytes = Encoding.UTF8.GetBytes(v);
// Attribute header
StoreAttributeType(key, msg, ref offset);
msg[offset++] = (byte)(stringBytes.Length >> 8);
msg[offset++] = (byte)(stringBytes.Length & 0xFF);
Array.Copy(stringBytes, 0, msg, offset, stringBytes.Length);
offset += stringBytes.Length;
}
원시 바이트 (예 문자열 유형 TLV 속성을 저장) UTF-8
와 같은 문자열을 인코딩하고
Type: AllocateErrorResponse, Length: 64, ID: 42a41221-9e57-4020-8681-34f9b064c1e4
Attributes:
- Type: ErrorCode, Value: Code: Unauthorized, Reason: Unauthorized
- Type: Nonce, Value: 9d85bfafbc460b1f
- Type: Realm, Value: testrealm
Attribute parsing not implemented for 0
- Length: 128, Value: 22-00-04-4E-6F-6E-65
type=0
및 0으로 구문 분석하려는 값 123,768,117,345,566,911,253,210 실제로 메시지의 끝과
80-22-00-04-4E-6F-6E-65
속성 8022
이 속성 SOFTWARE
으로 정의 된 서버 소프트웨어의 이름이고, 길이는 0x0004
하고 값 4E-6F-6E-65
그래서 서버가 모두 반환 텍스트 None
입니다 올바른 값과 모든 올바른 길이의 문자열이 UTF-16 나눌 수있는 길이로 채워진 것 같습니다. 이것은 인코딩 문제로 보이지만 서버의 소프트웨어 버그, 서버의 구성 문제 또는 내 클라이언트의 문제인지는 알 수 없습니다. 나는이 모든 것이 오픈 소스이며 소스 코드를 파고들 수 있다고 생각하지만 필자는 그렇게하기 전에 누군가가 통찰력을 가지기를 바라고있다.