[206] | 1 | #!/usr/bin/python
|
---|
| 2 | #
|
---|
| 3 | # Utilities for determining the Windows operating system version remotely.
|
---|
| 4 | #
|
---|
| 5 |
|
---|
| 6 | from samba import srvsvc
|
---|
| 7 |
|
---|
| 8 | # Constants
|
---|
| 9 |
|
---|
| 10 | PLATFORM_UNKNOWN = 0
|
---|
| 11 | PLATFORM_WIN9X = 1
|
---|
| 12 | PLATFORM_NT4 = 2
|
---|
| 13 | PLATFORM_NT5 = 3 # Windows 2000
|
---|
| 14 |
|
---|
| 15 | def platform_name(platform_type):
|
---|
| 16 |
|
---|
| 17 | platform_names = { PLATFORM_UNKNOWN: "Unknown",
|
---|
| 18 | PLATFORM_WIN9X: "Windows 9x",
|
---|
| 19 | PLATFORM_NT4: "Windows NT",
|
---|
| 20 | PLATFORM_NT5: "Windows 2000" }
|
---|
| 21 |
|
---|
| 22 | if platform_names.has_key(platform_type):
|
---|
| 23 | return platform_names[platform_type]
|
---|
| 24 |
|
---|
| 25 | return "Unknown"
|
---|
| 26 |
|
---|
| 27 | def platform_type(info101):
|
---|
| 28 | """Determine the operating system type from a SRV_INFO_101."""
|
---|
| 29 |
|
---|
| 30 | if info101['major_version'] == 4 and info101['minor_version'] == 0:
|
---|
| 31 | return PLATFORM_NT4
|
---|
| 32 |
|
---|
| 33 | if info101['major_version'] == 5 and info101['minor_version'] == 0:
|
---|
| 34 | return PLATFORM_NT5
|
---|
| 35 |
|
---|
| 36 | return PLATFORM_UNKNOWN
|
---|
| 37 |
|
---|
| 38 | def is_domain_controller(info101):
|
---|
| 39 | """Return true if the server_type field from a SRV_INFO_101
|
---|
| 40 | indicates a domain controller."""
|
---|
| 41 | return info101['server_type'] & srvsvc.SV_TYPE_DOMAIN_CTRL
|
---|
| 42 |
|
---|
| 43 | def os_version(name):
|
---|
| 44 | info = srvsvc.netservergetinfo("\\\\%s" % name, 101)
|
---|
| 45 | return platform_type(info)
|
---|
| 46 |
|
---|
| 47 | if __name__ == "__main__":
|
---|
| 48 | import sys
|
---|
| 49 | if len(sys.argv) != 2:
|
---|
| 50 | print "Usage: osver.py server"
|
---|
| 51 | sys.exit(0)
|
---|
| 52 | info = srvsvc.netservergetinfo("\\\\%s" % sys.argv[1], 101)
|
---|
| 53 | print "platform type = %d" % platform_type(info)
|
---|
| 54 | if is_domain_controller(info):
|
---|
| 55 | print "%s is a domain controller" % sys.argv[1]
|
---|