現在開発中の単純な Python プログラムがありますが、何らかの理由で動作しません。
完全なプログラムが機能する方法は、20 個のポートのリストがあり、そのリストをループして、基本的に選択したポートでホストに ping を実行します。コードは次のとおりです。
import socket
import sys
print ' +-====================================================-+'
print ' / \ '
print '| PyPortScanner |'
print '| by Ag3ntChr0m |'
print ' \ /'
print ' +-====================================================-+'
print ''
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error, msg:
print 'Failed to create socket. Error code: ' + str(msg[0]) + 'Error message: ' + msg[1]
sys.exit()
print 'Socket Created'
host = raw_input('Enter the desired host to scan: ')
port = [80, 443, 21, 22, 4567, 8080, 25, 3389, 23, 53, 1723, 110, 135, 445,
139, 1863, 143, 8081, 10000, 1025]
portFail = []
print 'Scanning top 20 most often open ports ...'
try:
remote_ip = socket.gethostbyname( host )
except socket.gaierror:
#couldn't resolve host at port
print 'Hostname could not be resolved. Program exiting'
sys.exit()
print 'IP address of ' + host + ' is ' + remote_ip
print '+-===================================-+'
print '| Ports Scanned:----------------------|'
print '+-===================================-+'
print ''
#Connect to remote server
for i in range(0, 20):
portScan = int(str(port[i])) <----
try:
s.connect((remote_ip, portScan))
print "\t" + str(portScan)
s.close()
except:
portFail.append(portScan)
err = True
raw_input('Press Enter to Continue...')
if err:
print '+-=============================-+'
print '| Failed Port Scan:-------------|'
print '+-=============================-+'
print ''
size = len(portFail)
for i in range(1, size):
print "\t" + str(portFail[i])
プログラムを実行すると、
- s.socket が接続を試みるために使用できる変数にポート番号を (矢印でマークされた行で) ロードします。
- 次に、ホストでソケットを開こうとし (基本的には ping を実行)、閉じようとします。
- 接続すると、これが画面の Ports Scanned の下に表示されます。
- ただし、失敗した場合 (最近はそうです)、Failed Port Scan の下に出力されます。
プログラムを実行すると、リストの最初のポート (80) が Ports Scanned の下に出力されますが、残りのポートは Failed Port Scan の下に置かれます。
このプログラムが最初のポートよりも多くのポートに ping を成功させるにはどうすればよいですか?