Bagaimana ini mungkin?
NodeX# ping ftp.company.com
PING ftp.company.com (xx.yy.8.11) 56(84) bytes of data.
64 bytes from ftp.company.com (xx.yy.8.11): icmp_seq=1 ttl=127 time=0.657 ms
...
^C
NodeX# /usr/bin/myftp.py -fftp.company.com -uuser -ppasssword
Transferring myftp.tgz to ftp.company.com:Incoming/
*** ftp login failed: [Errno -5] No address associated with hostname
Operation failed, exit code=3
Sedangkan jika saya melakukan ini, ia bekerja:
NodeX# /usr/bin/myftp.py -fxx.yy.8.11 -uuser -ppassword
Transferring myftp.tgz to ftp.company.com:Incoming/
Operation completed successfully
Juga, jika saya membuat entri di / etc / hosts, maka itu berfungsi menggunakan namanya. Apa yang menyebabkannya?
Menggali menunjukkan:
NodeX# dig ftp.company.com ANY
; <<>> DiG 9.5.0-P2 <<>> ftp.company.com ANY
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21125
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;ftp.company.com. IN ANY
;; ANSWER SECTION:
ftp.company.com. 28800 IN A xx.yy.8.11
;; Query time: 1 msec
;; SERVER: xx.zz.8.34#53(xx.zz.8.34)
;; WHEN: Thu Oct 11 14:53:00 2012
;; MSG SIZE rcvd: 63
resolv.conf menampilkan 2 nameserver, sebuah dig @ach masing-masing mengembalikan IP.
Kode Python 2.6 terlihat seperti:
try:
print("Preparing ftplib.FTP for " + ftpHost)
ftp = ftplib.FTP()
except Exception, e:
print("*** ftp prep failed: %s" % e.__str__())
return 3
end
try:
print("Connecting to '" + ftpHost + "'")
ftp.connect(ftpHost, ftpPort)
except Exception, e:
print("*** ftp connection failed: %s" % e.__str__())
return 4
end
Output adalah:
Preparing ftplib.FTP for ftp.company.com
Connecting to 'ftp.company.com'
*** ftp connection failed: [Errno -5] No address associated with hostname
Operation failed, exit code=4
sementara:
Node2414332# ping ftp.company.com
PING ftp.company.com (xx.yy.8.11) 56(84) bytes of data.
64 bytes from ftp.company.com (xx.yy.8.11): icmp_seq=1 ttl=127 time=0.804 ms
TERPECAHKAN:
Meskipun koneksi python kita () gagal di getaddrinfo () ketika diberi nama host (lihat di bawah), ini berfungsi dengan alamat. Secara mudah, gethostbyname () berfungsi dan kami memiliki perbaikan sederhana: createconnection (gethostbyname (hostname)). Weerd.
2
Ini mungkin pertanyaan yang lebih baik untuk serverfault.com
Seperti apa tampilan "dig ftp.company.com ANY"?
—
David K. Hess
Bisakah nama host itu diselesaikan melalui semua server nama di resolv.conf? (Saya berasumsi Anda menggunakan Linux berdasarkan prompt dan pathing Anda).
—
tMC
apakah Anda kebetulan memiliki tanda hubung "-" di hostname, yang menyebabkan parsing argumen baris salah menafsirkannya?
@ David, saya telah memperpanjang pertanyaan dengan output penggalian - terima kasih sudah mencoba :)
—
DJC