Webサーバーのリストがソケットライブラリのあるポートでリッスンしているかどうかを確認しようとしています。しかし、私はリストを正常に実行するための反復を得ることができません:ソケットの接続機能に文字列のリストを反復できません
#!/usr/bin/python
import socket
myList = ['www.google.com', 'www.spoon.com']
scanList = []
port = 80
def resolveHost(x):
try:
h = socket.gethostbyname(x)
except:
pass
return h
def scan(host,port):
s = socket.socket()
s.connect(host,port)
print s.recv(3)
for x in myList:
scanList.append(resolveHost(x))
print scanList
for x in scanList:
scan(x,25)
This is returning:
Traceback (most recent call last):
['216.58.199.196', '207.32.184.61']
File "C:/Users/Casey/Desktop/projects/dsid_check.py", line 28, in <module>
scan(x,25)
File "C:/Users/Casey/Desktop/projects/dsid_check.py", line 18, in scan
s.connect(host,port)
File "C:\Python27\lib\socket.py", line 228, in meth
return getattr(self._sock,name)(*args)
TypeError: connect() takes exactly one argument (2 given)
Process finished with exit code 1
私はこれらのページからの応答が期待されていますが、私はしません。
----------編集したソース------------
だから私は、次のような見て私のソースを変更した:
#!/usr/bin/python
import socket
myList = ['www.espn.com', 'www.google.com', 'www.spoon.com']
scanList = []
port = 80
def resolveHost(x):
try:
h = socket.gethostbyname(x)
return h
except:
print "Could not resolve %s" % x
def scan(host,port):
hostR = resolveHost(host)
s = socket.socket()
s.settimeout(3)
s.connect((hostR,port))
try:
print s.recv(1024)
except:
print "Connection to %s timed out" % x
for x in myList:
scanList.append(resolveHost(x))
for x in scanList:
scan(x,port)
これで私はオンラインにすべきウェブサーバーのリストに接続することができません。 Alexのおすすめのライブラリリンクを読んでください。
と仮定 'socket.gethostbyname'はあなたが無視する例外を発生させます。定義されていない場合、どのように 'h 'を返すことができますか?例外を発生させます。 –
'scanList'を' myListのxに対してresolveHost(x) 'または' map(resolveHost、myList) 'として定義することもできます。 –