期待发送0x0d(\ r \ n,回车)程序收到0x0a(\ n,新行)

时间:2015-11-22 12:31:03

标签: c passwords expect

我正在尝试使用Expect自动化no-ip client配置。脚本(make install)运行已编译的noip2.c,需要输入服务的电子邮件和密码。

似乎\r以某种方式被此程序视为密码的一部分。我使用以下脚本:

#!/usr/bin/expect

spawn sudo make install

expect "email string for no-ip.com" { send "my@email.com\r" }
expect "password for user" { send "mypassword\r" }
然而,它会导致接收程序无限期地等待(\r看似被忽略)。使用exp_internal 1选项,我收到了以下发送字符的确认信息:

send: sending "mypassword\r" to { exp6 }

noip2逐个接收字符,并用星号掩盖每个字符。处理密码输入的代码如下所示:

do {
  if (read(0, &ch, 1) != 1)
    continue;
  if (ch == 0x0d)
    break;
  if ((ch == 0x08) || (ch == 0x7f)) {
    putchar(8);
    putchar(' ');
    putchar(8);
    x--;
  } else {
    *x++ = ch;
    putchar('*');
  }
  fflush(stdout);
} while (1);

我在printf("%.2x", ch);旁边添加了putchar('*');,并为Expect发送的0x0a字符 获得了\r(完整结果:{{1} })。

接下来,我将Expect脚本行更改为:

*0x6d*0x79*0x70*0x61*0x73*0x73*0x77*0x6f*0x72*0x64*0x0a

并得到了同样的结果:

expect "password for user" { send "mypassword\x0d" }

当我改为:

*0x6d*0x79*0x70*0x61*0x73*0x73*0x77*0x6f*0x72*0x64*0x0a

我得到了:

expect "password for user" { send "mypassword\x0b" }

在Expect和*0x6d*0x79*0x70*0x61*0x73*0x73*0x77*0x6f*0x72*0x64*0x0b 计划的相关部分之间,某些事情明显干扰并将0x0d更改为0x0a。可能是什么原因?

0 个答案:

没有答案