aşağıdaki kodda amaç hangi ip adresin socket ile sunucu açıp açmadığını görmek. ancak bu işlemi yaparken s.connect((ip_address, 12345))
satırında bu socket bağlantısına istek göndermiş oluyor. Bu benim istemediğim bir şey. Çünkü istek gönderince sunucu kodu bu isteği kabul edip iletişime geçmeye çalışıyor. Benim istediğim ise sadece hangi cihazın socket ile bağlantı açıp açmadığı.
import nmap
import ping3
import socket
def scan_ip():
ip_address = socket.gethostbyname(socket.gethostname())
ip_range = '.'.join(ip_address.split('.')[:3]) + '.0/24'
nm = nmap.PortScanner()
nm.scan(ip_range, arguments='-sn')
hosts = nm.all_hosts()
print("Ağdaki tüm cihazların IP ve MAC adresleri:")
for host in hosts:
if 'mac' in nm[host]['addresses']:
ip_address = nm[host]['addresses']['ipv4']
mac_address = nm[host]['addresses']['mac']
# Ping gönder
response_time = ping3.ping(ip_address)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(1) # Bağlantı zaman aşımı süresi 1 saniye
try:
s.connect((ip_address, 12345))
s.close()
is_open = True
except (socket.timeout, ConnectionRefusedError):
is_open = False
if response_time is not None:
pinf_durumu = "Açık"
else:
pinf_durumu = "Kapalı"
if is_open:
socket_status = "Açık"
else:
socket_status = "Kapalı"
item_text = f"{ip_address} {mac_address} Ping: {pinf_durumu} Socket: {socket_status}"
print(item_text)
scan_ip()