Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

How is this possible?

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

Whereas if I do this, it works:

NodeX# /usr/bin/myftp.py -fxx.yy.8.11 -uuser -ppassword 
Transferring myftp.tgz to ftp.company.com:Incoming/
Operation completed successfully

Also, if I create an entry in /etc/hosts, then it works using the name. What gives?

Dig shows:

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 shows 2 nameservers, a dig @each returns the IP.

Python 2.6 code looks like:

    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 is:

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

while:

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

SOLVED:

Though our python’s createconnection() fails in getaddrinfo() when given a hostname (see below), it works with an address. Conveniently, gethostbyname() works and so we have the simple fix: createconnection(gethostbyname(hostname)). Weerd.

share|improve this question

migrated from stackoverflow.com Oct 11 '12 at 18:38

This question came from our site for professional and enthusiast programmers.

2  
This may be a better question for serverfault.com –  grieve Oct 11 '12 at 16:40
1  
What does the output of "dig ftp.company.com ANY" look like? –  David K. Hess Oct 11 '12 at 16:41
    
Can that hostname be resolved via all the name servers in resolv.conf? (i'm assuming you're using Linux based on your prompt and pathing) Is the machine dual homed? –  tMC Oct 11 '12 at 17:01
2  
do you by any chance have a dash "-" in the hostname, that causes parsing of the line arguments to interpret them wrong? –  Iliyan Bobev Oct 11 '12 at 17:02
    
@David, I've extended the question with dig output - thanks for having a go :) –  DJC Oct 11 '12 at 22:39
show 14 more comments

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.