私はサーバーの情報を取得するプログラムを書いています。ただし、割り当て前にleng
が参照されています。どうすればこれを防ぐことができますか?Python変数エラー - 代入前の参照
プログラムは最初に開いているポートをスキャンします。次に、見つかった最初のオープンポートに接続します。その後、サーバーに関する情報を取得します。プログラムはプログラムのIPアドレスを取得し、最後に接続を閉じます。
import socket
VER = None
portlist = [21,22,25,80,110,443]
ports_test = [21,22,25,80,110,443]
length = 0
leng = 0
siteORip = input("input either a site <eg:www.anysite.com> or an ip address<eg:123.45.67.890>>")
def get_ban():
print("[CONNECTING>]Establishing connection...")
while True:
try:
port = portlist.pop(0)
s = socket.socket()
socket.setdefaulttimeout(5)
s.connect((siteORip,port))
s.send("x".encode())
data = s.recv(1024)
print("[SERVER BANNER>]",data)
break
except:
s.close()
length = length + 1
if length == 6:
print("[ERROR>]Failed to connect")
break
else:
continue
def get_info():
try:
info = socket.gethostbyaddr(siteORip)
print("[SERVER INFO:([HOST,ADDITIONAL HOST,IP ADDRESS])>]",info)
except:
print("[ERROR>]Unknown error retrieving server info")
def get_ip():
try:
IP = socket.gethostbyname(siteORip)
except:
IP = socket.gethostbyname(siteORip)
try:
print("[IP ADDRESS>]",IP)
except:
print("[ERROR>]Unable to access IP")
VER = 1
s.close()
def ports_open():
while True:
try:
for x in ports_test:
s = socket.socket()
socket.setdefaulttimeout(5)
s.connect((siteORip,x))
print("[TESTING...>]Port",x,"is open")
s.close()
except:
print("[TESTING...>]Port",x,"is closed")
s.close()
leng = leng + 1
if leng == 6:
break
else:
continue
def main():
ports_open()
get_ban()
get_info()
get_ip()
print("[<PROGRAM CONNECTION ENDED>]")
main()
wait = input("")
また、完全なエラーメッセージを投稿したときにも役立ちます。 –