2017-08-16 15 views
0

次のコードは、TCPを使用して多数のデバイスに接続する場合に有効です。しかし、ユーザー名とパスワードを要求するデバイスに接続しようとしても、そうではありません。認証付きスウィフトTelnetストリーム

telnet経由で接続する場合、Cisco SX 80のようなデバイスは、接続後にlogin:プロンプトを返します。

ただし、次のコードを使用すると、OpenCompletedイベントが発生し、HasBytesAvaialableが発生しますが、バッファは空です。

socketSecurityLevelを何かに設定すると、SSLではなく単純なtelnetであるため、エラーが発生します。

私が紛失していることに関するアイデアはありますか?

func openTcpStream(){ 
if !tcpHost.isEmpty{ 
    Stream.getStreamsToHost(withName: tcpHost, port: tcpPort, inputStream: &inputStream, outputStream: &outputStream) 
    if inputStream != nil{ 
    let input: InputStream = inputStream! 
    input.delegate = self 
    input.schedule(in: RunLoop.current, forMode: RunLoopMode.defaultRunLoopMode) 
    self.inputStream!.setProperty(StreamSocketSecurityLevel.none, forKey: Stream.PropertyKey.socketSecurityLevelKey) 
    input.open() 

    } 
    if outputStream != nil{ 
    let output: OutputStream = outputStream! 
    output.delegate = self 
    output.schedule(in: RunLoop.current, forMode: RunLoopMode.defaultRunLoopMode) 
    self.outputStream!.setProperty(StreamSocketSecurityLevel.none, forKey: Stream.PropertyKey.socketSecurityLevelKey) 
    output.open() 

    } 
} 

}

func stream(_ aStream: Stream, handle eventCode: Stream.Event) { 
var event = "" 
switch eventCode { 
case Stream.Event.openCompleted: 
    if writeQueue != ""{ 
    writeTcpStream(bufferToWrite: writeQueue) 

    } 
case Stream.Event.hasBytesAvailable: 
    if inputStream != nil{ 
    readTcpStream(inputStream: inputStream) 

    } 
default:() 

} 

}

func readTcpStream(inputStream: InputStream?){ 
if inputStream != nil{ 
    let input = inputStream! 
    var readBuffer: NSString = "" 
    var readByte = [UInt8](repeating:0, count: 512) 
    while input.hasBytesAvailable{ 
    input.read(&readByte, maxLength: readByte.count) 
    let tempString = NSString(bytes: readByte, length: readByte.count, encoding: String.Encoding.utf8.rawValue) 
    if tempString?.length != nil{ 
     readBuffer = (readBuffer as String) + (tempString! as String) as NSString 
    } 
    } 
} 

}

答えて

1

Telnetプロトコルは、ソケット上単なるテキストではありません。詳細はRFC854

です。更新された仕様RFC5198があります。Unicodeが必要ない場合は、実装する必要はありません。

関連する問題