2015-04-15 12 views
4

Я использую эмуляцию unix-сервера ssh для iOS. В процессе переговоров я встретил много препятствий и по-прежнему сражался с ними. Один из последних - о пакетных данных SSH2_MSG_KEX_DH_GEX_REPLY, где я получаю неверную длину пакета (может быть, постороннее заполнение). Описание пакета для всего процесса, как показано ниже:SSH Переговоры: Bad SSH2_MSG_KEX_DH_GEX_REPLY или что-то еще?

Client : connection with aix.polarhome.com with port 775 (changed port for ssh) using GCDAsyncSocket 
Server : SSH-2.0-OpenSSH_6.0 
Client : send SSH-2.0-OpenSSH_6.0 

(Rest packet will follow BPP protocol) 
Server : SSH2_MSG_KEXINIT with set of supported algorithms 
Client : SSH2_MSG_KEXINIT with set of common algorithms 

Client : SSH2_MSG_KEX_DH_GEX_REQUEST_OLD 
     code: 
    SignedByte sendByte[1920]; 
    int writeIndex = 0; 

    minGroupLength = 1024; 
    prefGroupLength = 1024; 
    maxGroupLength = 4096; 

    sendByte[writeIndex++] = SSH2_MSG_KEX_DH_GEX_REQUEST_OLD; 

    [self write32BitInteger:prefGroupLength toPacket:sendByte fromIndex:writeIndex]; 
    writeIndex += 4; 

    [self sendSSHBinaryPacketPayload:sendByte toLength:writeIndex]; 
    writeIndex = 0; 

Server : SSH2_MSG_KEX_DH_GEX_GROUP 

client -> fetch values of p and g 
     compute value of e (1 < e < (p-1)/2) 

Client : SSH2_MSG_KEX_DH_GEX_INIT 
     Code 
SignedByte sendByte[1920]; 
    int writeIndex = 0; 

NSInteger eByteCount = [[e description] stringByReplacingOccurrencesOfString:@" " withString:@""].length/2; 

sendByte[writeIndex++] = SSH2_MSG_KEX_DH_GEX_INIT; 

[self write32BitInteger:eByteCount toPacket:sendByte fromIndex:writeIndex]; 
writeIndex += 4; 

Byte eBytes[eByteCount]; 
NSInteger length = [self getBytes:eBytes fromBigInteger:e]; 
for (int i = 0; i < length; i++) { 
    sendByte[writeIndex++] = eBytes[i]; 
} 

[self sendSSHBinaryPacketPayload:sendByte toLength:writeIndex]; 
writeIndex = 0; 

Server : SSH2_MSG_KEX_DH_GEX_REPLY 
Total length : 720 
Packet length (4 bytes): 00 00 02 bc (700 which should be 720 - 4 = 716) Don't Know why this 700? 

client -> read host key and verify it 
     read value of f 
     read signature and verify it 

Client : SSH2_MSG_NEWKEYS 

Теперь после того, как посланный сервер издевается последний пакет и нет данных взамен SSH2_MSG_NEWKEYS.

Я изучил код других эмуляторов ssh, но ни один из них не помог. Я совершенно не знаю, что мне нужно сделать, пожалуйста, помогите, я действительно так расстроен.

+0

Попробуйте использовать wirehark со шпателем или может быть терминалом mac и сравнить данные. –

ответ

0

Per @revinder в комментарии:

Я решил, что мой собственный сервер посылает два пакета объединены в одну, в SSH2_MSG_KEX_DH_GEX_REPLY и SSH2_MSG_NEWKEYS.

+0

Да, я тоже пробовал то же самое позже. Это действительно сработало, но застряло на следующем шаге. – Revinder

 Смежные вопросы

  • Нет связанных вопросов^_^