| #! /usr/bin/env python |
| |
| """Print the long name of an Internet domain. |
| |
| This script will take an Internet address and print out where in the |
| world that message originated from, based on the top-level domain code |
| found in the address. Addresses can be in any of the following forms: |
| |
| xx -- just the country code or top-level domain identifier |
| host.domain.xx -- any Internet host or network name |
| somebody@where.xx -- an Internet email address |
| |
| Country codes are maintained by the RIPE Network Coordination Centre, |
| in coordination with the ISO 3166 Maintenance Agency at DIN Berlin. |
| |
| <url:ftp://info.ripe.net/iso3166-countrycodes> |
| |
| The latest known change to this information was: |
| |
| Thu Feb 10 10:20:28 MET 1994 |
| |
| This script also knows about non-geographic top-level domains. |
| |
| Usage: %s [-d] [-h] addr [addr ...] |
| |
| -d (--dump) -- print mapping of all known top-level domains |
| -h (--help) -- print this help message |
| |
| """ |
| __version__ = '1.0' |
| __author__ = 'Barry Warsaw <bwarsaw@python.org>' |
| __source__ = '<url:http://www.python.org/~bwarsaw/pyware/>' |
| |
| |
| import sys |
| import string |
| import getopt |
| |
| |
| |
| def usage(status=0): |
| print __doc__ % sys.argv[0] |
| sys.exit(status) |
| |
| def resolve(rawaddr): |
| parts = string.splitfields(rawaddr, '.') |
| if not len(parts): |
| print 'No top-level domain in:', rawaddr |
| return |
| addr = parts[-1] |
| if nameorg.has_key(addr): |
| print rawaddr, 'is from a', nameorg[addr], 'organization' |
| elif country.has_key(addr): |
| print rawaddr, 'originated from', country[addr] |
| else: |
| print 'Where in the world is %s?' % rawaddr |
| |
| |
| |
| def main(): |
| help = 0 |
| status = 0 |
| dump = 0 |
| |
| opts, args = getopt.getopt(sys.argv[1:], 'hd', ['help', 'dump']) |
| for arg, val in opts: |
| if arg in ('-h', '--help'): |
| help = 1 |
| elif arg in ('-d', '--dump'): |
| dump = 1 |
| |
| if help: |
| usage(status) |
| |
| if dump: |
| print 'Non-geographic domains:' |
| codes = nameorg.keys() |
| codes.sort() |
| for code in codes: |
| print ' %4s:' % code, nameorg[code] |
| |
| print '\nCountry coded domains:' |
| codes = country.keys() |
| codes.sort() |
| for code in codes: |
| print ' %2s:' % code, country[code] |
| else: |
| map(resolve, args) |
| |
| |
| # The mappings |
| nameorg = { |
| "arpa": "Arpanet", |
| "com": "commercial", |
| "edu": "educational", |
| "gov": "government", |
| "mil": "military", |
| "net": "networking", |
| "org": "non-commercial", |
| "int": "international", |
| } |
| |
| |
| |
| country = { |
| "af": "Afghanistan", |
| "al": "Albania", |
| "dz": "Algeria", |
| "as": "American Samoa", |
| "ad": "Andorra", |
| "ao": "Angola", |
| "ai": "Anguilla", |
| "aq": "Antarctica", |
| "ag": "Antigua and Barbuda", |
| "ar": "Argentina", |
| "am": "Armenia", |
| "aw": "Aruba", |
| "au": "Australia", |
| "at": "Austria", |
| "az": "Azerbaijan", |
| "bs": "Bahamas", |
| "bh": "Bahrain", |
| "bd": "Bangladesh", |
| "bb": "Barbados", |
| "by": "Belarus", |
| "be": "Belgium", |
| "bz": "Belize", |
| "bj": "Benin", |
| "bm": "Bermuda", |
| "bt": "Bhutan", |
| "bo": "Bolivia", |
| "ba": "Bosnia and Herzegowina", |
| "bw": "Botswana", |
| "bv": "Bouvet Island", |
| "br": "Brazil", |
| "io": "British Indian Ocean Territory", |
| "bn": "Brunei Darussalam", |
| "bg": "Bulgaria", |
| "bf": "Burkina Faso", |
| "bi": "Burundi", |
| "kh": "Cambodia", |
| "cm": "Cameroon", |
| "ca": "Canada", |
| "cv": "Cape Verde", |
| "ky": "Cayman Islands", |
| "cf": "Central African Republic", |
| "td": "Chad", |
| "cl": "Chile", |
| "cn": "China", |
| "cx": "Christmas Island", |
| "cc": "Cocos (Keeling) Islands", |
| "co": "Colombia", |
| "km": "Comoros", |
| "cg": "Congo", |
| "ck": "Cook Islands", |
| "cr": "Costa Rica", |
| "ci": "Cote D'ivoire", |
| "hr": "Croatia (local name: Hrvatska)", |
| "cu": "Cuba", |
| "cy": "Cyprus", |
| "cz": "Czech Republic", |
| "dk": "Denmark", |
| "dj": "Djibouti", |
| "dm": "Dominica", |
| "do": "Dominican Republic", |
| "tp": "East Timor", |
| "ec": "Ecuador", |
| "eg": "Egypt", |
| "sv": "El Salvador", |
| "gq": "Equatorial Guinea", |
| "er": "Eritrea", |
| "ee": "Estonia", |
| "et": "Ethiopia", |
| "fk": "Falkland Islands (Malvinas)", |
| "fo": "Faroe Islands", |
| "fj": "Fiji", |
| "fi": "Finland", |
| "fr": "France", |
| "fx": "France, Metropolitan", |
| "gf": "French Guiana", |
| "pf": "French Polynesia", |
| "tf": "French Southern Territories", |
| "ga": "Gabon", |
| "gm": "Gambia", |
| "ge": "Georgia", |
| "de": "Germany", |
| "gh": "Ghana", |
| "gi": "Gibraltar", |
| "gr": "Greece", |
| "gl": "Greenland", |
| "gd": "Grenada", |
| "gp": "Guadeloupe", |
| "gu": "Guam", |
| "gt": "Guatemala", |
| "gn": "Guinea", |
| "gw": "Guinea-bissau", |
| "gy": "Guyana", |
| "ht": "Haiti", |
| "hm": "Heard and McDonald Islands", |
| "hn": "Honduras", |
| "hk": "Hong Kong", |
| "hu": "Hungary", |
| "is": "Iceland", |
| "in": "India", |
| "id": "Indonesia", |
| "ir": "Iran (Islamic Republic of)", |
| "iq": "Iraq", |
| "ie": "Ireland", |
| "il": "Israel", |
| "it": "Italy", |
| "jm": "Jamaica", |
| "jp": "Japan", |
| "jo": "Jordan", |
| "kz": "Kazakhstan", |
| "ke": "Kenya", |
| "ki": "Kiribati", |
| "kp": "Korea, Democratic People's Republic of", |
| "kr": "Korea, Republic of", |
| "kw": "Kuwait", |
| "kg": "Kyrgyzstan", |
| "la": "Lao People's Democratic Republic", |
| "lv": "Latvia", |
| "lb": "Lebanon", |
| "ls": "Lesotho", |
| "lr": "Liberia", |
| "ly": "Libyan Arab Jamahiriya", |
| "li": "Liechtenstein", |
| "lt": "Lithuania", |
| "lu": "Luxembourg", |
| "mo": "Macau", |
| "mk": "Macedonia, the Former Yugoslav Republic of", |
| "mg": "Madagascar", |
| "mw": "Malawi", |
| "my": "Malaysia", |
| "mv": "Maldives", |
| "ml": "Mali", |
| "mt": "Malta", |
| "mh": "Marshall Islands", |
| "mq": "Martinique", |
| "mr": "Mauritania", |
| "mu": "Mauritius", |
| "yt": "Mayotte", |
| "mx": "Mexico", |
| "fm": "Micronesia, Federated States of", |
| "md": "Moldova, Republic of", |
| "mc": "Monaco", |
| "mn": "Mongolia", |
| "ms": "Montserrat", |
| "ma": "Morocco", |
| "mz": "Mozambique", |
| "mm": "Myanmar", |
| "na": "Namibia", |
| "nr": "Nauru", |
| "np": "Nepal", |
| "nl": "Netherlands", |
| "an": "Netherlands Antilles", |
| "nc": "New Caledonia", |
| "nz": "New Zealand", |
| "ni": "Nicaragua", |
| "ne": "Niger", |
| "ng": "Nigeria", |
| "nu": "Niue", |
| "nf": "Norfolk Island", |
| "mp": "Northern Mariana Islands", |
| "no": "Norway", |
| "om": "Oman", |
| "pk": "Pakistan", |
| "pw": "Palau", |
| "pa": "Panama", |
| "pg": "Papua New Guinea", |
| "py": "Paraguay", |
| "pe": "Peru", |
| "ph": "Philippines", |
| "pn": "Pitcairn", |
| "pl": "Poland", |
| "pt": "Portugal", |
| "pr": "Puerto Rico", |
| "qa": "Qatar", |
| "re": "Reunion", |
| "ro": "Romania", |
| "ru": "Russian Federation", |
| "rw": "Rwanda", |
| "kn": "Saint Kitts and Nevis", |
| "lc": "Saint Lucia", |
| "vc": "Saint Vincent and the Grenadines", |
| "ws": "Samoa", |
| "sm": "San Marino", |
| "st": "Sao Tome and Principe", |
| "sa": "Saudi Arabia", |
| "sn": "Senegal", |
| "sc": "Seychelles", |
| "sl": "Sierra Leone", |
| "sg": "Singapore", |
| "sk": "Slovakia (Slovak Republic)", |
| "si": "Slovenia", |
| "sb": "Solomon Islands", |
| "so": "Somalia", |
| "za": "South Africa", |
| "gs": "South Georgia and the South Sandwich Islands", |
| "es": "Spain", |
| "lk": "Sri Lanka", |
| "sh": "St. Helena", |
| "pm": "St. Pierre and Miquelon", |
| "sd": "Sudan", |
| "sr": "Suriname", |
| "sj": "Svalbard and Jan Mayen Islands", |
| "sz": "Swaziland", |
| "se": "Sweden", |
| "ch": "Switzerland", |
| "sy": "Syrian Arab Republic", |
| "tw": "Taiwan, Province of China", |
| "tj": "Tajikistan", |
| "tz": "Tanzania, United Republic of", |
| "th": "Thailand", |
| "tg": "Togo", |
| "tk": "Tokelau", |
| "to": "Tonga", |
| "tt": "Trinidad and Tobago", |
| "tn": "Tunisia", |
| "tr": "Turkey", |
| "tm": "Turkmenistan", |
| "tc": "Turks and Caicos Islands", |
| "tv": "Tuvalu", |
| "ug": "Uganda", |
| "ua": "Ukraine", |
| "ae": "United Arab Emirates", |
| "gb": "United Kingdom", |
| "us": "United States", |
| "um": "United States Minor Outlying Islands", |
| "uy": "Uruguay", |
| "uz": "Uzbekistan", |
| "vu": "Vanuatu", |
| "va": "Vatican City State (Holy See)", |
| "ve": "Venezuela", |
| "vn": "Viet Nam", |
| "vg": "Virgin Islands (British)", |
| "vi": "Virgin Islands (U.S.)", |
| "wf": "Wallis and Futuna Islands", |
| "eh": "Western Sahara", |
| "ye": "Yemen", |
| "yu": "Yugoslavia", |
| "zr": "Zaire", |
| "zm": "Zambia", |
| "zw": "Zimbabwe", |
| } |
| |
| |
| |
| if __name__ == '__main__': |
| main() |