我已尝试过各种方法将主机名的变量替换为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
感谢任何帮助......
答案 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
的注释:它返回给定值的“人工表示”,对于字符串值,它是引用的相同字符串。