gpt4 book ai didi

c - 使用套接字手动建立与 ftp 服务器的连接

转载 作者:行者123 更新时间:2023-11-30 15:41:44 26 4
gpt4 key购买 nike

我正在尝试从 ftp 服务器手动接收文件。到目前为止,我可以连接到服务器并检查其 220 响应,但随后我想发送用户名,wireshark 显示正在发送一些随机字节。首先是我的代码:

struct request 
{
int reply; /* TRUE = request reply from server */
int msgLen; /* length of message text */
char message[REQUEST_MSG_SIZE]; /* message buffer */
};

...
//ESTABLISH SOCKET CONNECTION
...

/* send request to server */
strcpy(myRequest.message,"ftp");
myRequest.msgLen = 3;
if (write (sFd, (char *) &myRequest, sizeof (myRequest)) == ERROR)
{
perror ("write");
close (sFd);
return ERROR;
}

if (read (sFd, replyBuf, REPLY_MSG_SIZE) < 0) {
perror ("read");
close (sFd);
return ERROR;
}

// CHECK if ser ver responded with code 220
if (strstr(replyBuf,"220")==NULL) {
perror ("Response220");
close (sFd);
return ERROR;
}

// send user name to server
strcpy(myRequest.message,"USER **");
myRequest.msgLen = 7;
if (write (sFd, (char *) &myRequest, sizeof (myRequest)) == ERROR)
{
perror ("write");
close (sFd);
return ERROR;
}

if (read (sFd, replyBuf, REPLY_MSG_SIZE) < 0) {
perror ("read");
close (sFd);
return ERROR;
}


printf ("MESSAGE FROM SERVER:\n%s\n", replyBuf);

但由于某种原因,我的发送字符串中似乎总是有一些随机字节:首先,ftp 字符串如下所示:

36 1.767818000 3.94.213.214 3.94.213.53 FTP 70 请求:\356\356\356\356\000\000\000\003ftp\000"\032\244^

它可以处理什么,服务器回复:

38 1.777790000 3.94.213.53 3.94.213.214 FTP 74 响应:220 (vsFTPd 3.0.2)

但是 USER 字符串看起来像这样:

40 1.781575000 3.94.213.214 3.94.213.53 FTP 70 请求:\356\356\356\356\000\000\000\aUSER **\000

毫不奇怪,它对此无能为力。此后,我希望服务器会要求我输入密码。

客户端运行在VxWorks机器上,服务器是Linux上的vsFTP

最佳答案

为什么要通过套接字发送结构体,您只需要发送数据即可。此外,您不能通过同一连接发送数据......一旦您与 ftpd 建立的第一个连接是命令连接,当您发送数据时,就会打开另一个连接。我想您需要先查看 FTP RFC 959,然后才能继续此操作。

关于c - 使用套接字手动建立与 ftp 服务器的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20432975/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com