Модератор: Модераторы разделов
Azazel
Сообщения: 21
Сообщение
Azazel » 17.05.2006 15:48
Пишу сканер FTP. Один из методов сканирования - запрос директории с параметром -R (рекурсивный обход сервера). Пишу с помощью библиотеки ftplib 3.1 Код примерно такой
подключение
ftpdir
отключение.
на моменте по-моему подключения часто возникает ошибка (или на моменте листинга - не могу понять)
на подобие
Код: Выделить всё
6423: symbol=FtpConnect; lookup in file=./a.out
6423: symbol=FtpConnect; lookup in file=/usr/lib/libftp.so.3
6423: binding file ./a.out to /usr/lib/libftp.so.3: normal symbol `FtpConnect'
lookup 0x08048000 0x00000280 -> 0x40032000 0x00001a8b /1 FtpConnect
6423: symbol=memset; lookup in file=./a.out
6423: symbol=memset; lookup in file=/usr/lib/libftp.so.3
6423: symbol=memset; lookup in file=/usr/lib/libstdc++.so.6
6423: symbol=memset; lookup in file=/lib/tls/libm.so.6
6423: symbol=memset; lookup in file=/lib/libgcc_s.so.1
6423: symbol=memset; lookup in file=/lib/tls/libc.so.6
6423: binding file /usr/lib/libftp.so.3 to /lib/tls/libc.so.6: normal symbol `memset' [GLIBC_2.0]
Segmentation fault
Что за сегментация? Какого она сглупила?
Сервер включен, другими программами сканируется.
Jan2ary
Бывший модератор
Сообщения: 630
Статус: Тщедушный очкарик
Сообщение
Jan2ary » 17.05.2006 16:40
Пожалуйста, разделяйте вопросы в разные темы.
Кроме того, вопросы по литературе у нас в другом разделе, а за "простейший пример" можно получить плюшку.
Правила читали?
И еще, называйте темы корректнее
Покажите код.
Не шалю, никого не трогаю, починяю примус...
Azazel
Сообщения: 21
Сообщение
Azazel » 17.05.2006 17:09
Хм. Извините за ошибки =))) Больше постараюсь не нарушать правила.
Код вот
Код: Выделить всё
//azftp.c
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include "ftplib.h"
/* exit values */
#define EX_SYNTAX 2 /* command syntax errors */
#define EX_NETDB 3 /* network database errors */
#define EX_CONNECT 4 /* network connect errors */
#define EX_LOGIN 5 /* remote login errors */
#define EX_REMCMD 6 /* remote command errors */
#define EX_SYSERR 7 /* system call errors */
static int logged_in = 0;
static char *host = NULL;
static char *user = NULL;
static char *pass = NULL;
static char mode = 'I';
static netbuf *conn = NULL;
void
ftp_connect(void){
if (conn) return;
if (host == NULL){
fprintf(stderr,"Host name not specified\n");
exit(EX_SYNTAX);
}
if (!logged_in){
if (user == NULL){
user = "anonymous";
if (pass == NULL) pass = "kolesnikov.vah@gmail.com";
}else if (pass == NULL) pass = "kolesnikov.vah@gmail.com";
if (!FtpConnect(host,&conn)){
fprintf(stderr,"Unable to connect to host %s\n%s", host, ftplib_lastresp);
exit(EX_CONNECT);
}
if (!FtpLogin(user,pass,conn)){
fprintf(stderr,"Login failure\n%s",FtpLastResponse(conn));
exit(EX_LOGIN);
}
logged_in = 1;
}
}
int
main(int argc, char *argv[])
{
printf("FTP Connection\n");
host=argv[1];
printf("ARGUMENT:%s\n",host);
char *ks;
sprintf(ks,"%s.ls",host);
printf("LSFile=%s\n",ks);
FtpInit();
printf("FTP initialised\n");
ftp_connect();
printf("FTP connected\n");
if(conn)
{
FtpDir(ks,"-R",conn);
FtpClose(conn);
}
else
{
printf("can't connect\n");
}
printf("Done\n\n");
return 0;
}
последнее выдаваемое сообщение
FTP initialised
Asgard
Сообщения: 215
Статус: North Valfader
Сообщение
Asgard » 17.05.2006 17:34
if (user == NULL){
user = "anonymous";
if (pass == NULL) pass = "kolesnikov.vah@gmail.com";
}else if (pass == NULL) pass = "kolesnikov.vah@gmail.com";
а память под user и pass кто выделять будет?
sator arepo tenet opera rotas ;)
------------------------------------------------------------
LJ
aLexx programmer
Сообщения: 985
Статус: Турук-Макто
ОС: Gentoo -> Ubuntu
Сообщение
aLexx programmer » 17.05.2006 18:30
Asgard писал(а): ↑ 17.05.2006 17:34
а память под user и pass кто выделять будет?
Код
будет всего лишь присваиванием значения указателю.
Пямять при этом выделять не надо.
Вот проблемный код:
И ещё:
Код: Выделить всё
if(conn)
{
FtpDir(ks,"-R",conn);
FtpClose(conn);
}
Причина: не выделена память для ks.
Azazel
Сообщения: 21
Сообщение
Azazel » 18.05.2006 18:05
Действительно, пересидел я малость в объектно-ориентированном =) Спасибо.
Еще вопрос - каким образом можно мне встаить try catch()? Для этого надо компилить g++?
Asgard
Сообщения: 215
Статус: North Valfader
Сообщение
Asgard » 18.05.2006 18:17
Еще вопрос - каким образом можно мне встаить try catch()? Для этого надо компилить g++?
а зачем делать такое аццкое месиво? или
if(error) {
perror(errno);
exit(EXIT_FAILURE)
}
уже не катит?
sator arepo tenet opera rotas ;)
------------------------------------------------------------
LJ
aLexx programmer
Сообщения: 985
Статус: Турук-Макто
ОС: Gentoo -> Ubuntu
Сообщение
aLexx programmer » 18.05.2006 18:49
Вы уж определитесь с языком...
Azazel
Сообщения: 21
Сообщение
Azazel » 18.05.2006 19:09
я только недавно перешел с builder. Как вставить этот if(error) в текст?
если я допустим хочу проверить подключился ли сервер?
И еще вдогонку - как знаю ип удаленного компа определить его DNS имя?
Asgard
Сообщения: 215
Статус: North Valfader
Сообщение
Asgard » 18.05.2006 19:15
например:
Код: Выделить всё
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
void error(const char* msg)
{
perror(msg);
exit(EXIT_FAILURE);
}
int main()
{
if(!some_function())
error("error in some_function()");
/* ... */
}
И еще вдогонку - как знаю ип удаленного компа определить его DNS имя?
man getaddrinfo или man gethostbyname
sator arepo tenet opera rotas ;)
------------------------------------------------------------
LJ
oav
Бывший модератор
Сообщения: 296
Сообщение
oav » 19.05.2006 12:26
Azazel писал(а): ↑ 18.05.2006 18:05
Действительно, пересидел я малость в объектно-ориентированном =) Спасибо.
не вижу связи
Azazel писал(а): ↑ 18.05.2006 18:05
Еще вопрос - каким образом можно мне встаить try catch()? Для этого надо компилить g++?
да
Azazel
Сообщения: 21
Сообщение
Azazel » 19.05.2006 16:35
Всем большое спасибо! Даже не ожидал такой скорой и полезной помощи! Особенная благодарность Alexx Programmer и Асгарду! Тему можно закрывать.