主机名

时间:2016-11-19 17:01:25

标签: python sockets

我已尝试过各种方法将主机名的变量替换为socket.connect调用,但我无法使其工作。我正在进行替换b / c我想从文件中读取主机IP列表并连接到它们中的每一个。我将变量正确格式化为带有单引号的字符串,但它不会连接:

# Connect to the Servers LOOP
    with open(sys.argv[2], 'r') as f1:
        for server in f1:
            s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

            server = server.strip('\n')
            server = "'%s'" % server
            print 'Connecting to ' + server

            #connect=s.connect(('10.11.1.229',25))
            connect=s.connect((server,25))

            # Receive the banner
            banner=s.recv(1024)
            print banner

            s.close

如果我硬编码主机名,它可以正常工作。执行结果如下:

Connecting to '10.11.1.8'
Traceback (most recent call last):
  File "./connect-loop.py", line 19, in <module>
     connect=s.connect((server,25))
  File "/usr/lib/python2.7/socket.py", line 228, in meth
     return getattr(self._sock,name)(*args)
socket.gaierror: [Errno -2] Name or service not known

感谢任何帮助......

1 个答案:

答案 0 :(得分:1)

问题是您在服务器名称中添加了滴答声(我想,为了在打印时正确格式化它),然后在解析主机名时进行解释。

尝试:

with open(sys.argv[2], 'r') as f1:
    for server in f1:
        s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        server = server.strip('\n')
        print 'Connecting to {} ...'.format(repr(server))

        connect=s.connect((server,25))

        banner=s.recv(1024)
        print repr(banner)

        s.close()

的变化:

  • 直接在print行格式化主机名,并使用repr对其进行引用。
  • 删除不需要的主机名格式化行
  • 在最后添加close()缺少的括号。

关于repr的注释:它返回给定值的“人工表示”,对于字符串值,它是引用的相同字符串。