게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
telnet 할 때 몇가지 질문드릴게 있습니다 ..ㅜㅜ
게시물ID : programmer_15842짧은주소 복사하기
작성자 : 후!하!후하
추천 : 0
조회수 : 463회
댓글수 : 3개
등록시간 : 2016/02/16 16:59:35

현재 장비에 telnet을 통해서 로그인하고 간단한 SNMP 명령을 보내는 프로그램을 만들었습니다.

그런데,

몇 번의 테스트를 해보니,

cmd 창에서 telnet을 하여 해당 IP와 포트에 접속할 때 는 문제가 없는데,

프로그램 상에서 telnet을 연결하면,

이상한 값의 데이터를 받아옵니다.

그레서 몇 시간을 고민 하던중에, 

http://stackoverflow.com/questions/7884743/stray-data-byte-in-telnet-negotiation-where-is-it-coming-from 

위 URL에서 ParseTelnet 메서드를 가져와 수행해야 데이터를 잘 받아오는 경우를 확인했습니다.

자세히 보실 필요는 없고 아래와 같은 소스코드 입니다 ..ㅜㅜ 

바이트 하나씩 가지고 와서 분류한 다음 미리 정해진 작업을 처리하는 메서드 같습니다

            void ParseTelnet(StringBuilder sb)
            {
                while (tcpSocket.Available > 0)
                {
                    int input = tcpSocket.GetStream().ReadByte();
                    switch (input)
                    {
                        case -1:
                            break;
                        case (int)Verbs.IAC:
                            // interpret as command
                            int inputverb = tcpSocket.GetStream().ReadByte();
                            if (inputverb == -1) break;
                            switch (inputverb)
                            {
                                case (int)Verbs.IAC:
                                    //literal IAC = 255 escaped, so append char 255 to string
                                    sb.Append(inputverb);
                                    break;
                                case (int)Verbs.DO:
                                case (int)Verbs.DONT:
                                case (int)Verbs.WILL:
                                case (int)Verbs.WONT:
                                    // reply to all commands with "WONT", unless it is SGA (suppres go ahead)
                                    int inputoption = tcpSocket.GetStream().ReadByte();
                                    if (inputoption == -1) break;
                                    tcpSocket.GetStream().WriteByte((byte)Verbs.IAC);
                                    if (inputoption == (int)Options.SGA)
                                        tcpSocket.GetStream().WriteByte(inputverb == (int)Verbs.DO ? (byte)Verbs.WILL : (byte)Verbs.DO);
                                    else
                                        tcpSocket.GetStream().WriteByte(inputverb == (int)Verbs.DO ? (byte)Verbs.WONT : (byte)Verbs.DONT);
                                    tcpSocket.GetStream().WriteByte((byte)inputoption);
                                    break;
                                default:
                                    break;
                            }
                            break;
                        default:
                            sb.Append((char)input);
                            break;
                    }
                }

왜 이런 현상이 발생하는지 궁금합니다.. 

그리고 한가지 더 질문하자면,

프로그램 상에서 텔넷을 연결하여 데이터를 전송받게 되면, 

More가 수행되어 한 줄씩 라인이 출력되는걸 볼 수가 있는데요..

코드 상으로 텔넷을 연결하게 될 경우에 그러면

한 라인을 가지고 오기 위해서는 한 바이트씩 데이터를 전송해서 가져와야 하는 건가요??

아니면 데이터를 한 번에 다 받아오긴 하지만,

프로그램 상에서 조금씩 보여주는 건가요??

궁금합니다!
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호