Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Lista kart sieciowych w Windows

9 views
Skip to first unread message

katnerster

unread,
Nov 14, 2009, 3:29:25 AM11/14/09
to
Witam!
Czy ktoś zna jakiś sposób na listę kart sieciowych w Windows?
Oczywiście językiem programowania jest Python :)
Pozdrawiam!

sebob

unread,
Nov 14, 2009, 6:17:50 AM11/14/09
to
katnerster pisze:
> Witam!
> Czy kto� zna jaki� spos�b na list� kart sieciowych w Windows?
> Oczywi�cie j�zykiem programowania jest Python :)
> Pozdrawiam!

Mo�e jaki� os.open("ipconfig")?
Bo w linux-ie p=os.popen("/sbin/ifconfig") lub f = open("/proc/net/dev")
Zobacz jeszcze tu ->
http://mail.python.org/pipermail/python-win32/2005-September/003746.html

Pozdrawiam


Witold

unread,
Nov 14, 2009, 6:28:59 AM11/14/09
to

Może tak:
import wmi
c = wmi.WMI()
for _if in c.Win32_NetworkAdapterConfiguration():
print _if.Description

Źródło: http://tgolden.sc.sabren.com/python/wmi/cookbook.html
Moduł: http://tgolden.sc.sabren.com/python/wmi/index.html

Pozdrawiam

Daniel Mróz

unread,
Nov 16, 2009, 7:41:30 AM11/16/09
to
On 14.11.2009, sebob <obara.s...@gmial.com> wrote:
>> Czy ktoś zna jakiś sposób na listę kart sieciowych w Windows?
>> Oczywiście językiem programowania jest Python :)
> Może jakiś os.open("ipconfig")?

> Bo w linux-ie p=os.popen("/sbin/ifconfig") lub f = open("/proc/net/dev")
A to ma być lista kart sieciowych, czy lista adresów IP, bo to nie to samo.
Jedna karta sieciowa może mieć zero lub więcej adresów IP, w systemie mogą
być adresy przypisane do interfejsów logicznych (np. loopback) itp.
"ifconfig" (który zresztą jest już passe i powinno się używać "ip") raportuje
jedynie adresy, a nie listę urządzeń fizycznych. Natomiast do /proc/net/dev
w wielu dystrybucjach potrzebne są uprawnienia roota, aby móc ten plik
odczytać.
Jeśli potrzeba jest tylko lista IPków, poniższa funkcja to zapewni, bez
konieczności parsowania wyjścia komendy, które może się zmienić. Wystarczają
uprawnienia zwykłego usera.


import array
import fcntl
import socket
import struct


IOCTL_SIOCGIFCONF = 0x8912

def local_ipaddrs(self, max_if=16):
# max_if to maksymalna liczba interjesów, jaka będzie
# sprawdzana. Można dać coś dużego, jeśli nie boimy
# się zużycia pamięci.
if struct.calcsize('P') == 8:
# 64bit
struct_size = 40
else:
# 32bit
struct_size = 32

data_array_size = max_if * struct_size
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
data_array = array.array('B', [ 0 for i in xrange(data_array_size) ])
data_size = struct.unpack('iL', fcntl.ioctl(sock.fileno(), IOCTL_SIOCGIFCONF, struct.pack('iL', data_array_size, data_array.buffer_info()[0])))[0]
sock.close()

ipaddrs = []
for i in xrange(0, data_size, struct_size):
ipaddrs.append(socket.inet_ntoa(data_array[i + 20:i + 24]))
return ipaddrs

print local_ipaddrs(16)

Pozdrawiam
Beorn

--
Daniel 'Beorn' Mróz <be...@alpha.pl> http://127.0.0.1/beorn
[GIT d s:- a-@ C++++ UL++++$ P+ L++++ E--- W+ N+++ o? K- w---]
[O- M- V! PS+ PE++ Y+ PGP++ t- 5 X R !tv b+ DI D++ G++ e h*]
[ r++ y+ ]

mak

unread,
Nov 20, 2009, 12:57:45 PM11/20/09
to
On 16 Lis, 13:41, Daniel Mróz <be...@alpha.pl> wrote:
> On 14.11.2009, sebob <obara.sebast...@gmial.com> wrote:>> Czy ktoś zna jakiś sposób na listę kart sieciowych w Windows?

> >> Oczywiście językiem programowania jest Python :)
> > Może jakiś os.open("ipconfig")?
> > Bo w linux-ie p=os.popen("/sbin/ifconfig") lub f = open("/proc/net/dev")
>

>     data_size = struct.unpack('iL', fcntl.ioctl(sock.fileno(), IOCTL_SIOCGIFCONF, struct.pack('iL', data_array_size, data_array.buffer_info()[0])))[0]

fcntl na windzie w taki sposob nie zadziala
najlepiej skorzystac z WMI lub popen('ipconfig /all')

Daniel Mróz

unread,
Nov 20, 2009, 2:09:12 PM11/20/09
to
On 20.11.2009, mak <grzegorz....@gmail.com> wrote:
>> >> Oczywiście językiem programowania jest Python :)
>> > Może jakiś os.open("ipconfig")?
>> > Bo w linux-ie p=os.popen("/sbin/ifconfig") lub f = open("/proc/net/dev")
>>     data_size = struct.unpack('iL', fcntl.ioctl(sock.fileno(), IOCTL_SIOCGIFCONF, struct.pack('iL', data_array_size, data_array.buffer_info()[0])))[0]
> fcntl na windzie w taki sposob nie zadziala
> najlepiej skorzystac z WMI lub popen('ipconfig /all')
Ja tu o Linuksie. Na Windows się nie wyznaję. Nie mój cyrk.
Podaję tylko receptę na uzyskanie IPków w odpowiedni sposób, zamiast
babrać się w parsowanie wyjścia /sbin/ip, /sbin/ifconfig czy grzebania
w /proc.
0 new messages