从远程服务器接收垃圾字符

receiving from remote server giving junk characters?

本文关键字:字符 服务器      更新时间:2023-10-16

我正在尝试编写一个telnet客户端连接到以下服务器:

198.182.241.14(宿主:pittsburgh State University, Kansas, USA) -登录:library

我已通过以下代码成功连接;

sd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in sin;
memcpy(&sin.sin_addr.s_addr, host->h_addr, host->h_length);
sin.sin_family = AF_INET;
sin.sin_port = htons(portno);
if (connect(sd, (struct sockaddr *)&sin, sizeof(sin)) < 0)
{
    printf("error .. connecting socketsn");
    return bRet;
}
printf("connected...n");

然后我发送"library"作为密码(据我所知,我必须输入硬编码密码)

但是在接收时,我收到了一些垃圾字符:,并且在下一次接收时它被挂起了:

char buf[2048] = {0};
send(sd, command, strlen(command),0);
send(sd, (void*)"n",2,0);

这里的命令是"library"

发送7个字节,但之后我的例外是从服务器接收一些数据:

**PSU图书馆联盟-选择要搜索的图书馆1. PSU斧图书馆目录……和更多*

我正在通过以下代码接收:

while(1)
{
    memset(buf, 0, 2048);
    int rv = recv(sd , buf , 2048 , 0);
    printf("received %dn",rv);
    if (rv < 0)
        return false;
    else if (rv == 0) {
        printf("Connection closed by the remote endnr");
        return 0;
    }
    buf[rv] = '';
    printf("%sn",buf);
    for(int i =0;i<strlen(buf);i++)
    {
        printf("%c = %d = 0x%08xn",buf[i], buf[i], buf[i]);
    }
}

打印一些垃圾字符,如下所示:

ÿýÿý ÿý#ÿý'
ÿ = -1 = 0xffffffff
ý = -3 = 0xfffffffd
 = 24 = 0x00000018
ÿ = -1 = 0xffffffff
ý = -3 = 0xfffffffd
  = 32 = 0x00000020
ÿ = -1 = 0xffffffff
ý = -3 = 0xfffffffd
# = 35 = 0x00000023
ÿ = -1 = 0xffffffff
ý = -3 = 0xfffffffd
' = 39 = 0x00000027
received 0
Connection closed by the remote end

帮忙吗?

更多编辑:任何好的文章/书籍参考/完整的代码示例-这样我就可以开始套接字编程,并通过密码成功登录telnet服务器

Thanks lot in Advance

当您连接到telnet服务器时,必须遵守telnet协议。虽然telnet连接可能看起来像纯文本发送/接收,但它实际上是一个额外的协议。每次接收到0xff时,这是一个telnet转义码。某些情况下:

  • 0xff 0xff =转义0xff数据字节
  • 0xff 0xfd = DO,后面跟着选项代码

所以在你的情况下,服务器发送给你一个DO(TerminalType=0x18), DO(TerminalSpeed=0x20), DO(XDisplayLocation0x23)和DO(NewEnvironmentOption=0x27)。你应该用WILL(…)或wouldn(…)来回答。在任何情况下,要获得真实的数据,您必须过滤掉telnet协议部分。

这里有一些有趣的链接给你:

    Telnet协议规范
  • Telnet选项规范
  • Telnet选项列表