Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 [ 210 ] 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242

Пример 18.2. hostaddrs

#! /usr/bin/perl

# hostaddrs - канонизация имени и вывод адресов use Socket; use Net;;hostent; $name = shift;

If ($hent = gethostbyname($name)) {

Sname = $hent->name; # Если отличается

$addr ref = $hent->addr llst;

addresses = map { inet ntoa(S ) } @$addr ref;

print "Sname => @addresses\n;

Примерный результат выглядит так:

% hostaddrs www.ora.com helio.ora.com => 204.148.40.9

% hostaddrs www,whitehouse.gov

www.whitehouse.gov => 198.137.240.91 198.137.240.92

[> Смотри также-

Описание функций gethostbyname и gethostbyaddr в perlfunc(l); документация по модулю Net::DNS с CPAN; документация по стандартным модулям Socket и Net::hostent.

18.2. Клиентские операции FTP

Проблема

Вы хотите подключиться к серверу FTP, чтобы отправить или принять с него файлы. Например, вы решили автоматизировать разовую пересылку многих файлов или автоматически создать зеркальную копию целого раздела сервера FTP.

Решение

Воспользуйтесь модулем Net::FTP с CPAN.

use Net::FTP;

Sftp = Net;:FTP->new("ftp,host,com") or die "Cant connect; $@\n";

$ftp->login($username, Spassword) or die "Couldnt login\n";

$ftp->cwd($directory) or die "Couldnt change directory\n";

$ftp->get($filename) or die "Couldnt get $filename\n";

$ftp->put(Sfilename) or die "Couldnt put $filename\n";

Комментарий

Работа с модулем Net::FTP состоит из трех шагов: подключение к серверу, идентификация и аутентификация и пересылка файлов. Все операции с сервером



FTP реализуются методами объекта Net::FTP. При возникновении ошибки методы возвращают undef в скалярном контексте и пустой список в списковом контексте.

Подключение осуществляется конструктором new. В случае ошибки неременной $@ присваивается сообщение об ошибке, а new возвращает undef. Первый аргумент определяет имя хоста сервера FTP и может сопровождаться необязательными параметрами:

$ftp = Net:.FTP->new("ftp.host, com", Timeout => 30, Debug => 1) or die Cant connect: $@\n";

Параметр Timeout определяет промежуток времени в секундах, после которого любая операция считается неудачной. Параметр Debug устанавливает уровень отладки (при значении, отличном от нуля, копии всех команд отправляются в STDERR). Строковый параметр Firewall определяет компьютер, являющийся прокси-сервером FTP. Параметр Port задает альтернативный номер порта (по умолчанию используется значение 21, стандартный номер порта FTP). Наконец, если параметр Passive равен true, все пересылки выполняются в пассивном режиме (требование некоторых брандмауэров и прокси-серверов). Параметры Firewall и Passive переопределяют переменные окружения FTP FIREWALL и FTP PASSIVE.

Следующим после подключения шагом является аутентификация. Обычно функция login вызывается с тремя аргументами: именем пользователя, паролем и учетной записью (account).

$ftp->login()

or die Couldnt authenticate.\n";

$ftp->login($username)

or die "Still couldnt authenticate.\n",

$ftp->login($username, $password)

or die "Couldnt authenticate, even with explicit username and password.\n";

$ftp->login($username, Spassword, $account) or die "No dice. It hates me.\n";

Если вызвать login без аргументов, Net::FTP с помощью модуля Net::Netrc определяет параметры хоста, к которому вы подключились. Если данные не найдены, делается попытка анонимной регистрации (пользователь anonymous, пароль username@hostname). Если при имени пользователя anonymous пароль не задан, в качестве пароля передается почтовый адрес пользователя. Дополнительный аргумент (учетная запись) в большинстве систем не используется. При неудачной аутентификации функция login возвращает undef.

После завершения аутентификации стандартные команды FTP выполняются с помощью методов, вызываемых для объекта Net::FTP. Методы get и put принимают и отправляют файлы. Отправка файла выполняется так:



$ftp->put($localfile, $remotefile)

or die "Cant send $localfile. $!\n";

Если второй аргумент отсутствует, имя удаленного файла совпадает с именем локального файла. Передаваемые данные также можно брать из файлового манипулятора (в этом случае имя удаленного файла передается в качестве второго аргумента):

$ftp->put(-STDIN, $remotefile)

or die "Cant send from STDIN: $!\n";

Если пересылка прерывается, удаленный файл не удаляется автоматически. Метод put возвращает удаленное имя файла при успешном заверщении или undef в случае ошибки.

Метод get, используемый для приема файлов, возвращает локальное имя файла или undef в случае ошибки:

$ftp->get($remotefile, $localfile)

or die Cant fetch $remotefile . V\n",

Метод get тоже может использоваться для приема файла в манипулятор; он возвращает манипулятор (или undef в случае ошибки):

$ftp->get($reiTiotefile, .STDOUT)

or die "Cant fetch $remotefile: $\n";

Необязательный третий аргумент get, смещение в удаленном файле, инициирует пересылку с заданного смещения. Принятые байты дописываются в конец локального файла.

Метод type изменяет режим трансляции файла. Если передать ему строку ("А ", "1", "Е" или "L), возвращается предыдущий режим трансляции. Методы ascii, binary, ebcdic и byte вызывают type с соответствующей строкой. При возникновении ошибок (например, если сервер FTP не поддерживает EBCDIC) type и вспомогательные методы возвращают undef.

Методы cwd($remotedir) и pwd используются для установки и определения текущего удаленного каталога. Оба метода возвращают true в случае успеха и false в противном случае. При вызове cwd(". ") вызывается метод cdup для перехода в родительский каталог текущего каталога. Вызов cwd без аргументов выполняет переход в корневой каталог.

$ftp->cwd("/pub/perl/CPAN/images/g-rated"); print "Im in the directory ", $ftp->pwd(), "\n;

Методы mkdir($reniotedir) и rnidir($reniotedir) создают и, соответственно, удаляют каталоги на удаленном компьютере. Для создания и удаления каталогов на локальном компьютере применяются встроенные функции mkdir и rmdir. Чтобы создать промежуточные каталоги на пути к указанному, передайте mkdir второй аргумент, равный true. Например, чтобы создать каталоги /pub, /pub/gnat и pub/gnat/perl, воспользуйтесь следующим вызовом:

$ftp->mkdir(/pub/gnat/perl, 1)

or die Cant create /pub/gnat/perl recursively: $i\n";



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 [ 210 ] 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242