0
データポートに接続できません。私は21のコマンドポートに接続し、ユーザー名とパスワードを送信することができます。それから私はPASV\r\n
を送る。私は応答を得て、データポートA * 256 + B = new_port
を計算します。 問題はこのポートに接続できないことです。 ソケットを作成するために私はcreateRemoteConnection()
機能を使用しています。それはコマンドポートのために初めて2度使用され、私はそこにnew_port
を渡して、もう一度それを呼び出します。 お願いします。ありがとうございました。FTP、パッシブモード。要求されたアドレスを割り当てることができません
PASV
227 Entering Passive Mode (80,251,0,59,158,36).
A: 158
B: 36
Port: 40484
Creating socket...
Socket created
connect failed. Error: Can't assign requested address
-
int createRemoteConnection(Arguments &arguments,int cmd) {
int sock;
struct sockaddr_in server;
if (DEBUG) {
puts("Creating socket...");
}
//Create socket
sock = socket(AF_INET , SOCK_STREAM , 0);
if (sock == -1)
{
fputs("Could not create socket.\n",stderr);
exit(1);
}
if (DEBUG) {
puts("Socket created");
}
char ip[100];
struct hostent *he;
struct in_addr **addr_list;
if ((he = gethostbyname(arguments.hostname)) == NULL) {
herror("gethostbyname");
exit(1);
}
addr_list = (struct in_addr **) he->h_addr_list;
for (int i = 0; addr_list[i] != NULL; i++) {
strcpy(ip, inet_ntoa(*addr_list[i]));
}
server.sin_addr.s_addr = inet_addr(ip);
server.sin_family = AF_INET;
server.sin_port = htons(cmd);
//Connect to remote server
if (connect(sock , (struct sockaddr *)&server , sizeof(server)) < 0)
{
perror("connect failed. Error");
exit(1);
}
if (DEBUG) {
puts("Connected\n");
}
return sock;
}
私は 'RETR'を送って' 425 PORTまたはPASVを最初に使用する 'を得ました。 'PASV'を送信し続けてデータソケットを作成しようとしましたが、前と同じエラーで失敗しました。 –
'PASV'を送信し、次に' RETR'を送信してから、ポートに接続しようとします。 –
+同じマシンで動作するスタンドアロンFTPクライアントを使用してファイルをダウンロードできますか? –