IP Adresinden MAC Adresini Öğrenmek

Bugün iş yerinde ağa bağlı olan diğer bilgisayarların MAC adresini öğrenmem gerekiyordu. Ben de bunun için basit bir kod yazdım.

import subprocess
import sys, os

def getMACAddr(command):
    runARP = subprocess.Popen(
        args=command,
        stdout=subprocess.PIPE,
        shell=True
    )
    
    return runARP.communicate()[0]

def pingIP():
    runPING = subprocess.Popen(
        args= "ping -n 1 " + sys.argv[1],
        stdout=subprocess.PIPE,
        shell=True
    )
    return runPING.communicate()[0]


pingIP()
getMAC = [getMACAddr("arp -a")]

for i in getMAC:
    findIP = i.decode().find(str(sys.argv[1] + " "))
    print(i[findIP:findIP+39].decode())

Aslında tüm işlemler Windows komut satırı işlemleriyle yapılıyor. “arp” komutu ağa bağlı ve daha önce iletişime geçilmiş tüm bilgisayarların MAC adreslerini veriyor. Bu yüzden öncelikle MAC adresini öğrenmek istediğim IP’ye ping atıyorum. find() ile de arp -a tablosunda çıkan IP ve MAC adreslerinden istediğimi ayırıyorum.

Çalıştırmak için program_adi.py [ip adresi] yazmanız (parantezsiz) gerekiyor.

Örnek:
image

1 Like

ARP tablosunu IP adresine gore filtreleme nerede? Butun tabloyu Tablonun ilk satirini dump ediyor gibi gozukuyor.

arp -n <IP> de mumkun bu arada.

Çok teşekkürler paylaşım için. Bir soruda ben sorayım cevaplarsanız menmun olurum. Python ile modem ipini değiştirmek mümkünmü ? Yani belirli aralıklarla kendi pc ip adresini nasıl değiştirebilirim ? Ben şuan selenium ile modem arayüzüne girerek değiştiriyorum. Fakat bunu windows içinde otomatik yapılabilirmi bilmiyorum açıkcası ?

Selenium Python kutuphanesi degil miydi zaten? Neyse, Selenium kullanarak yaptigin bir seyi Python kullanarak da yapabilirsin.

En son (~10 sene once) kullandigimda yapabiliyordu. Hala yapabilmesi lazim.

Örnek kod varmı hocam, hangi modülle yapılıyor. Ben araştırdım fakat bir türlü bulamadım. Selenium python modülü evet, fakat tarayıcı ile işlem yapıyoruz. Ben işi tarayıcısız halletmek amaçım.

Modemin arayuzune bagli olarak degisir. Tarayicinin yaptigi istekleri requests ile yapabilirsin; illa tarayici istedigini zannetmiyorum. Veya Python ile niye ugrasiyorsun, curl yeter.

Windows’ta periyodik task calistirmak da Task Scheduler filan gibi bir seyle sistem bileskeniyle yapiliyordu. Koda ihtiyaci yok.