+7 499 990-10-21

передача файлов по ftp

Re: передача файлов по ftp

Сообщение Altez » 13 окт 2011, 16:24

спасибо за предупреждение, буду дорабатывать обязательно, просто сегодня тестовый запуск и нужен обмен
Altez
 
Постов: 286
Зарегистрирован: 13 июн 2011, 22:37
Откуда: Астрахань

Re: передача файлов по ftp

Сообщение Spike » 13 окт 2011, 21:36

напиши свой почтовый ящик в личку, пришлю тебе скрипты которыми пользуюсь третий год для обмена файлами по ftp...
Изображение
Spike
 
Постов: 401
Зарегистрирован: 26 авг 2009, 15:33
Откуда: Курская обл. г.Льгов

Re: передача файлов по ftp

Сообщение Altez » 15 окт 2011, 03:25

Spike писал(а):напиши
уже)
статью бы запилить на тему обмена за счет сэкономленных долгих вечеров

хоть обмен по Дропбоксу искаропки не впечатлил (если на момент старта нет сети, синхронизация тупит до перезапуска сервиса),
дело похоже сдвинулось и на очереди розничная сеть Роспечати. Пользуясь случаем, требуется админ для поднятия SQLсерва)
Altez
 
Постов: 286
Зарегистрирован: 13 июн 2011, 22:37
Откуда: Астрахань

Re: передача файлов по ftp

Сообщение BigAndy » 15 окт 2011, 05:14

(если на момент старта нет сети, синхронизация тупит до перезапуска сервиса),

man resolv.conf
man autofs
BigAndy
 
Постов: 461
Зарегистрирован: 29 ноя 2009, 17:11

Re: передача файлов по ftp

Сообщение BigAndy » 01 ноя 2011, 23:38

Почему нельзя использовать скрипт, лежащий в мегафон-модеме:

Цитирую
Код: Выделить всё
grep -v «MobilePartner.sh» /etc/sudoers >/tmp/${TEMPFILE} 2>&1
DELETECOMMENT=«delete requiretty for hw_mobile»
REQUIRETTY=`grep "${DELETECOMMENT}" /tmp/${TEMPFILE}`
if [ «x${REQUIRETTY}» != «x» ]
then
REQUIRETTY=`echo "${REQUIRETTY}" | awk -F ',' '{printf $2}'`
else
REQUIRETTY=`grep «requiretty» /tmp/${TEMPFILE}`
if [ «x${REQUIRETTY}» != «x» ]
then
sed -i «s/${REQUIRETTY}/# ,${REQUIRETTY},${DELETECOMMENT}/g» /tmp/${TEMPFILE} 2>/dev/null
fi
fi# Shashank: Defect fix AJ2D13470: Begin
echo -e «ALL ALL=(ALL) NOPASSWD:ALL» >> /tmp/${TEMPFILE}



ССЫлка
BigAndy
 
Постов: 461
Зарегистрирован: 29 ноя 2009, 17:11

Re: передача файлов по ftp

Сообщение redeyser » 04 ноя 2011, 19:24

Хотел рассказать про свой опыт:
я разные пртоколы пользовал и фтп тоже ... неплохой вариант но имеет много сложностей и подводных камней, не рекомендую... к тому же сталкивался с ситуацией невозможности работы по фтп с некоторыми 3g модемами (или тарифами).
Я лично сейчас передаю файлы через простой сокет. клиент сокетный и сервер сокетный ... написан может быть на перле или питоне ... примеров масса. Я написал на перле работает быстро, никаких настроек не требуется вообще только порт прокинуть.
cat www | grep true >> /dev/head
redeyser
 
Постов: 36
Зарегистрирован: 02 ноя 2011, 09:06

Re: передача файлов по ftp

Сообщение Spike » 04 ноя 2011, 22:54

Вы бы уже скрипты что ли выложили и инструкцию как их использовать, раз рекламируете свой метод..
Изображение
Spike
 
Постов: 401
Зарегистрирован: 26 авг 2009, 15:33
Откуда: Курская обл. г.Льгов

Re: передача файлов по ftp

Сообщение BigAndy » 04 ноя 2011, 23:18

scp рулит больше, чем ftp, при том скрипты особые и писать не надо.
BigAndy
 
Постов: 461
Зарегистрирован: 29 ноя 2009, 17:11

Re: передача файлов по ftp

Сообщение redeyser » 05 ноя 2011, 15:03

Spike писал(а):Вы бы уже скрипты что ли выложили и инструкцию как их использовать, раз рекламируете свой метод..


Да, кстати scp тоже вариант... если сильно не морочится.

вот код сервкра:
Код: Выделить всё
#!/usr/bin/perl
use Socket;
#SRV FILE TRANSPORT v1.1
my $securepath='/home/point/'; #разрешаем обмен тока с этой директорией

sub GetDate
{
  ($MIN, $HOUR, $DAY, $MONTH, $YEAR) = (localtime)[1,2,3,4,5];
  $timename=($YEAR+1900).'-'.($MONTH+1).'-'.$DAY.' '.$HOUR.':'.$MIN;
  return $timename;
}

$SIG{CHLD} = \&REAPER;

sub REAPER {
    while ((my $waitedpid = waitpid(-1,&WNOHANG)) > 0) { print "kill zombie\n" }
    $SIG{CHLD} = \&REAPER;
}


sub push_client($)
{
  $pid=shift;
  $kidpids{$pid}=time();
 
}

sub kill_clients
{
  our %kidpids;
  our $max_time_client;
  my $t=time();
  foreach $pid (keys %kidpids) {
        print STDOUT $pid.":".($t - $kidpids{$pid}).";";
   if (($t - $kidpids{$pid})>$max_time_client) {
           print STDOUT "kill client $pid\n";
      kill(15,$kidpids{$pid});
      delete $kidpids{$pid};
   }
  }
  print STDOUT "\n";
}

%kidpids=();
$max_time_client=300; # максимальное время конекта
$R_SIZE=4096;
$MyPort=3332; #порт сервера
socket(Server,PF_INET,SOCK_STREAM,getprotobyname("tcp"));
setsockopt(Server,SOL_SOCKET,SO_REUSEADDR,1); # для быстрого перезапуска
$myaddr = sockaddr_in($MyPort,INADDR_ANY);
bind(Server,$myaddr) or die "невозможно стать сервером на этом порту";
listen(Server,SOMAXCONN) or die "невозможно слушать порт";
$SIG{CHLD} = 'IGNORE';
$COUNT=0;
`echo $$ > srv_ft.pid`;
while (accept(Client,Server)){
   $other_end=getpeername(Client) or print STDOUT "невозможно идентифицировать клиента";
   ($port,$iaddr) = unpack_sockaddr_in($other_end);
   $ip = inet_ntoa($iaddr);
   $claimed_hostname = gethostbyaddr($iaddr,AF_INET);
   ++$COUNT;
   $curdate=GetDate();
   print "$curdate: client :$COUNT: $ip\n";
   if ($kidpid = fork) {
     kill_clients();
     push_client($kidpid);
     close (Client);
     next;
   }
   # дочерний процесс
   defined ($kidpid) or die "no fork!!!";
   close (Server);
   select(Client); # нулевые значения
   $|=1; # автовыгрузка буффера

    $input = <Client>;chomp($input);
    print STDOUT "m:$input\n";
    if ($input eq ''){last;}
    my @data=split(";",$input);
    %hd=();
    foreach $i (@data) { $i=~/^(.*?)=(.*?)$/; $hd{$1}=$2; print STDOUT "$1=$2 \n";}

         binmode(Client);

    if ($hd{'cmd'} eq 'put'){
      print STDOUT "put ".$hd{'file'}."\n";
      if (!open(RFILE,">",$hd{'file'})){print "cant create this file [".$hd{'file'}."]\n";close Client;exit;}
         binmode(RFILE);
                   while( ($size=read(Client,$data,$R_SIZE))!=0 ) {
           print RFILE $data;
           #print STDOUT ".";
         }
      close(RFILE);
      
    }
   
    if ($hd{'cmd'} eq 'get')
    {
      print STDOUT "get ".$hd{'file'}."\n";
      if (($hd{'file'}!~/$securepath/)or($hd{'file'}=~/\.\./)) {print STDOUT "warning!!! access denied!\n";}
      else { #READ
      if (!open(RFILE,"<",$hd{'file'})){print "cant open this file [".$hd{'file'}."]\n";close Client;exit;}
         binmode(RFILE);
                   while( ($size=read(RFILE,$data,$R_SIZE))!=0 ) {
           print Client $data;
           print STDOUT ".";
         }
      close(RFILE);
      } # END READ
    }

   close Client;
   print STDOUT "close client number:$COUNT\n";
   exit;
}
close(Server);
print "close server\n";


вот код клиента:
Код: Выделить всё
#!/usr/bin/perl
use Socket;

our $R_SIZE=4096;

sub readsets($){
  $pathset=shift;
  our $pswd,$ipserver,$skport;
  open(FS,"<",$pathset);
  while (<FS>) {
   if (/^ipserver=(.*?)$/){$ipserver=$1;}
   if (/^skport=(.*?)$/){$skport=$1;}
   if (/^pswd=(.*?)$/){$pswd=$1;}
  }
close(FS);
}

sub skopen(){
our $skopen=0;
  $RemoteHost = $ipserver;
  $RemotePort = $skport;
  socket(Server,PF_INET,SOCK_STREAM,getprotobyname("tcp"));
  if (! ($internet_addr = inet_aton($RemoteHost))) {print "not found skserver\n";return 0;}
  $paddr = sockaddr_in($RemotePort,$internet_addr);
  if (! (connect ( Server, $paddr))) { print "error connect socket\n";return 0;}
   select ((select(Server),$|=1)[0]);
  $skopen=1;
  return 1;
}

sub get($$){
my $file=shift;
my $to=shift;
our $R_SIZE;
$head="cmd=get;file=$file\n";
  if ($skopen){
    if (!open(RFILE,">",$to)){print "cant create this file [".$to."]\n";return 0;exit;}
    print Server $head;
    binmode(RFILE);
    binmode(Server);
    while( ($size=read(Server,$data,$R_SIZE))!=0 ) {
   print RFILE $data;
   print STDOUT ".";
    }
    print STDOUT "get.ok.\n";
    close(RFILE);
  }
  return 1;
}

sub put($$){
my $file=shift;
my $to=shift;
our $R_SIZE;
$head="cmd=put;file=$to\n";
  if ($skopen){
    if (!open(RFILE,"<",$file)){print "cant open this file [".$file."]\n";return 0;exit;}
    print Server $head;
    binmode(RFILE);
    binmode(Server);
    while( ($size=read(RFILE,$data,$R_SIZE))!=0 ) {
   print Server $data;
   print STDOUT ".";
    }
    print STDOUT "put.ok.\n";
    close(RFILE);
  }
  return 1;
}


sub skclose(){
  if ($skopen){
  close (Server);
  shutdown (Server,1);
  }
}

readsets('.client_ft');
skopen();
print "open socket $ipserver:$skport\n";
if ($ARGV[0] eq 'get') {
    get($ARGV[1],$ARGV[2]);
}
if ($ARGV[0] eq 'put') {
    put($ARGV[1],$ARGV[2]);
}
print "close socket\n";
skclose();


вот содержимое настроечного файла для клиента ".client_ft"
Код: Выделить всё
ipserver=xxx.xxx.xxx.xxx
skport=3332


в коде сервера для хоть какойто безопасности указываем только один обязательный каталог обмена $securepath
текст записываем в файл srv_ft.pl и client_ft.pl (и настроечный .client_ft)
делаем их выполняемыми chmod a+x *.pl
ну и все. Далее запускаем сервер на сервере ./srv_ft &
на клиенте используем такую строку ./client_ft get /home/point/price.zip price.zip для загрузки файла и ./client_ft put transactions.zip /home/point/transactions.zip для отправки файла. на сервак прокидываем порт ( здесь 3332)
Это чисто транспорт файлов. Сюда можно и общение клиента и сервера привязать если необходим более интелектуальный обмен.
cat www | grep true >> /dev/head
redeyser
 
Постов: 36
Зарегистрирован: 02 ноя 2011, 09:06

Пред.

Вернуться в Техподдержка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12


cron

Кто сейчас на конференции

Сейчас посетителей на конференции: 12, из них зарегистрированных: 0, скрытых: 0 и гостей: 12 (основано на активности пользователей за последние 5 минут)
Больше всего посетителей (180) здесь было 29 апр 2024, 13:15

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12