Получение сетевой маски в Python

На основании

https://www.mathsisfun.com/geometry/area-irregular-polygons.html

def _area_(coords):
    t=0
    for count in range(len(coords)-1):
        y = coords[count+1][1] + coords[count][1]
        x = coords[count+1][0] - coords[count][0]
        z = y * x
        t += z
    return abs(t/2.0)

a=[(5.09,5.8), (1.68,4.9), (1.48,1.38), (4.76,0.1), (7.0,2.83), (5.09,5.8)]
print _area_(a)

Хитрость в том, что первая координата также должна быть последней.

7
задан Scott 1 June 2009 в 19:50
поделиться

4 ответа

This works for me in Python 2.2 on Linux:

iface = "eth0"
socket.inet_ntoa(fcntl.ioctl(socket.socket(socket.AF_INET, socket.SOCK_DGRAM), 35099, struct.pack('256s', iface))[20:24])
8
ответ дан 6 December 2019 в 10:02
поделиться

Did you look here?

http://docs.python.org/library/fcntl.html

This works for me in python 2.5.2 on Linux. Was finishing it when Ben got ahead, but still here it goes (sad to waste the effort :-) ):

vinko@parrot:~$ more get_netmask.py
# get_netmask.py by Vinko Vrsalovic 2009
# Inspired by http://code.activestate.com/recipes/439093/
# and http://code.activestate.com/recipes/439094/
# Code: 0x891b SIOCGIFNETMASK

import socket
import fcntl
import struct
import sys

def get_netmask(ifname):
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        return socket.inet_ntoa(fcntl.ioctl(s.fileno(), 0x891b, struct.pack('256
s',ifname))[20:24])

if len(sys.argv) == 2:
        print get_netmask(sys.argv[1])
vinko@parrot:~$ python get_netmask.py lo
255.0.0.0
vinko@parrot:~$ python get_netmask.py eth0
255.255.255.0
4
ответ дан 6 December 2019 в 10:02
поделиться

В Windows может быть полезен этот фрагмент кода:

import os
import sys
import _winreg


def main():
    adapter_list_key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,
        r'SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards')

    adapter_count = _winreg.QueryInfoKey(adapter_list_key)[0]

    for i in xrange(adapter_count):
        sub_key_name = _winreg.EnumKey(adapter_list_key, i)
        adapter_key = _winreg.OpenKey(adapter_list_key, sub_key_name)
        (adapter_service_name, _) = _winreg.QueryValueEx(adapter_key, "ServiceName")
        (description, _) = _winreg.QueryValueEx(adapter_key, "Description")

        adapter_registry_path = os.path.join(r'SYSTEM\ControlSet001\Services',
            adapter_service_name, "Parameters", "Tcpip")
        adapter_service_key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,
            adapter_registry_path)
        (subnet_mask, _) = _winreg.QueryValueEx(adapter_service_key, "SubnetMask")
        (ip_address, _) = _winreg.QueryValueEx(adapter_service_key, "IpAddress")

        sys.stdout.write("Name: %s\n" % adapter_service_name)
        sys.stdout.write("Description: %s\n" % description)
        sys.stdout.write("SubnetMask: %s\n" % subnet_mask)
        sys.stdout.write("IpAdress: %s\n" % ip_address)


if __name__ == "__main__":
    main()

Получить список сетевых адаптеров из раздела реестра HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ NetworkCards и затем извлеките дополнительную информацию о каждом адаптере из ключа HKLM \ SYSTEM \ ControlSet001 \ Services \ {adapter_guid} \ Parameters \ Tcpip .

Я тестировал его на Windows XP с 2 виртуальными адаптерами, работает нормально. Должен работать в 2000, 2003 и Vista тоже.

1
ответ дан 6 December 2019 в 10:02
поделиться

Вы можете использовать эту библиотеку: http://github.com/rlisagor/pynetlinux . Примечание: я автор библиотеки.

2
ответ дан 6 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: