На основании
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)
Хитрость в том, что первая координата также должна быть последней.
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])
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
В 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 тоже.
Вы можете использовать эту библиотеку: http://github.com/rlisagor/pynetlinux . Примечание: я автор библиотеки.