سایتهای بسیاری هستند که سرویسهایی را برای بدست آوردن مشخصات کشور، از روی IP ارائه میدهند؛ ولی اکثر آنها برای این سرویسی که ارائه میدهند هزینه دریافت میکنند. سایتی که من در این مقاله معرفی خواهم کرد این سرویس را به رایگان ارائه میهد، به شرط اینکه درخواستهای شما در هر ساعت بیشتر از 10000 نباشد. اگر این اتفاق روی دهد، یعنی درخواستهای شما به بیش از 10000 در ساعت برسد، درخواستهای شما با خطای HTTP 403, forbidden مواجه خواهد شد و تا زمانیکه محدودیت شما به پایان برسد، باید منتظر بمانید.
سرویسی که این سایت ارائه میدهد، سورس باز و رایگان میباشد. اگر شما با این محدودیت 10000 درخواست در ساعت مشکلی داشتید، میتوانید این
سرویس را از اینجا دریافت و آنرا در سرور
خودتان اجرا کنید. سورس سرویس هم بر روی github موجود هست.
freegeoip.net/{format}/{IP_or_hostname}
freegeoip.net/xml/4.2.2.2 : XML freegeoip.net/csv/8.8.8.8 :CSV freegeoip.net/json/github.com :JSON
http://freegeoip.net/xml/162.158.88.214
<Response> <IP>162.158.88.214</IP> <CountryCode>DE</CountryCode> <CountryName>Germany</CountryName> <RegionCode>HE</RegionCode> <RegionName>Hesse</RegionName> <City>Frankfurt am Main</City> <ZipCode>60438</ZipCode> <TimeZone>Europe/Berlin</TimeZone> <Latitude>50.1167</Latitude> <Longitude>8.6833</Longitude> <MetroCode>0</MetroCode> </Response>
اگر آدرس IP را مشخص نکنید مشخصات مربوط به IP آدرس خودتان را دریافت خواهید کرد.
در ادامه از یک برنامه console application برای دریافت این پاسخ ارسال شده از سرویس و استخراج دادهها از آن استفاده خواهیم کرد.
البته این روش برای برنامههای تحت وب هم به همین صورت خواهد بود و تفاوتی نمیکند.
از این روش میتوانید برای بلاک کردن کشورهایی که نمیخواهید به برنامهی شما دسترسی پیدا کنند استفاده کنید و یا اینکه بدانید ip هایی که از سایت شما بازدید میکنند از کدام کشورهای جهان هستند و یا کار خلاقانهای که میتوانید انجام دهید، نمایش مکانهای بازدید کنندهها بر روی نقشه گوگل، با استفاده از طول و عرض جغرافیایی که این سرویس در اختیارتان میگذارد، میباشدpublic static void ReadXmlElements(string ipAddress) { XDocument xdoc=XDocument.Load("http://www.freegeoip.net/xml/" + ipAddress); var country = xdoc.Descendants("Response").Select(c => new { IpAddress = c.Element("IP")?.Value, CountryCode = c.Element("CountryCode")?.Value, CountryName = c.Element("CountryName")?.Value, RegionCode = c.Element("RegionCode")?.Value, RegionName = c.Element("RegionName")?.Value, City = c.Element("City")?.Value, ZipCode = c.Element("ZipCode")?.Value, TimeZone = c.Element("TimeZone")?.Value, Latitude = c.Element("Latitude")?.Value, Longitude = c.Element("Longitude")?.Value, MetroCode = c.Element("MetroCode")?.Value, }); var countryData = country.First(); Console.WriteLine("CountryName :" + countryData.CountryName +Environment.NewLine + "CountryCode :"+countryData.CountryCode + Environment.NewLine + "RegionCode :"+countryData.RegionCode + Environment.NewLine + "RegionName :" + countryData.RegionName + Environment.NewLine + "City :" + countryData.City + Environment.NewLine + "ZipCode :" + countryData.ZipCode + Environment.NewLine + "TimeZone :" + countryData.TimeZone + Environment.NewLine + "Latitude :" + countryData.Latitude + Environment.NewLine + "Longitude :" + countryData.Longitude + Environment.NewLine + "MetroCode :" + countryData.MetroCode ); Console.ReadKey(); }
در متد main برنامه، متد ReadXmlElements را فراخوانی کرده و آدرس آی
پی مورد نظر را پاس میدهیم:
static void Main(string[] args) { ReadXmlElements("162.158.88.214"); }
یک نکته : برای مقایسه کد کشور بدست آمده، باید لیست کاملی از کشورهای جهان را در اختیار داشته باشید، تا بتوانید تصمیم بگیرید که آیا کشور درخواست کننده، مد نظر شما هست یا خیر. برای اینکار، کلاسی را آماده کردهام که شامل کل کشورهای جهان میباشد و نام و کد کشورها، در آن وجود دارد؛ به صورت زیر:
public class WorldCountries { public string CountryCode { get; set; } public string CountryName { get; set; } }
public static class GenerateCountries { public static IList<WorldCountries> CreateCountries() { return new[] { new WorldCountries { CountryCode = "AF", CountryName = "Afghanistan"}, new WorldCountries { CountryCode = "AX", CountryName = "Åland Islands"}, new WorldCountries { CountryCode = "AL", CountryName = "Albania"}, new WorldCountries { CountryCode = "DZ", CountryName = "Algeria"}, new WorldCountries { CountryCode = "AS", CountryName = "American Samoa"}, new WorldCountries { CountryCode = "AD", CountryName = "Andorra"}, new WorldCountries { CountryCode = "AO", CountryName = "Angola"}, new WorldCountries { CountryCode = "AI", CountryName = "Anguilla"}, new WorldCountries { CountryCode = "AQ", CountryName = "Antarctica"}, new WorldCountries { CountryCode = "AG", CountryName = "Antigua and Barbuda"}, new WorldCountries { CountryCode = "AR", CountryName = "Argentina"}, new WorldCountries { CountryCode = "AM", CountryName = "Armenia"}, new WorldCountries { CountryCode = "AW", CountryName = "Aruba"}, new WorldCountries { CountryCode = "AU", CountryName = "Australia"}, new WorldCountries { CountryCode = "AT", CountryName = "Austria"}, new WorldCountries { CountryCode = "AZ", CountryName = "Azerbaijan"}, new WorldCountries { CountryCode = "BS", CountryName = "Bahamas"}, new WorldCountries { CountryCode = "BH", CountryName = "Bahrain"}, new WorldCountries { CountryCode = "BD", CountryName = "Bangladesh"}, new WorldCountries { CountryCode = "BB", CountryName = "Barbados"}, new WorldCountries { CountryCode = "BY", CountryName = "Belarus"}, new WorldCountries { CountryCode = "BE", CountryName = "Belgium"}, new WorldCountries { CountryCode = "BZ", CountryName = "Belize"}, new WorldCountries { CountryCode = "BJ", CountryName = "Benin"}, new WorldCountries { CountryCode = "BM", CountryName = "Bermuda"}, new WorldCountries { CountryCode = "BT", CountryName = "Bhutan"}, new WorldCountries { CountryCode = "BA", CountryName = "Bosnia and Herzegovina"}, new WorldCountries { CountryCode = "BW", CountryName = "Botswana"}, new WorldCountries { CountryCode = "BV", CountryName = "Bouvet Island"}, new WorldCountries { CountryCode = "BR", CountryName = "Brazil"}, new WorldCountries { CountryCode = "IO", CountryName = "British Indian Ocean Territory"}, new WorldCountries { CountryCode = "BN", CountryName = "Brunei Darussalam"}, new WorldCountries { CountryCode = "BG", CountryName = "Bulgaria"}, new WorldCountries { CountryCode = "BF", CountryName = "Burkina Faso"}, new WorldCountries { CountryCode = "BI", CountryName = "Burundi"}, new WorldCountries { CountryCode = "KH", CountryName = "Cambodia"}, new WorldCountries { CountryCode = "CM", CountryName = "Cameroon"}, new WorldCountries { CountryCode = "CA", CountryName = "Canada"}, new WorldCountries { CountryCode = "CV", CountryName = "Cape Verde"}, new WorldCountries { CountryCode = "KY", CountryName = "Cayman Islands"}, new WorldCountries { CountryCode = "CF", CountryName = "Central African Republic"}, new WorldCountries { CountryCode = "TD", CountryName = "Chad"}, new WorldCountries { CountryCode = "CL", CountryName = "Chile"}, new WorldCountries { CountryCode = "CN", CountryName = "China"}, new WorldCountries { CountryCode = "CX", CountryName = "Christmas Island"}, new WorldCountries { CountryCode = "CC", CountryName = "Cocos (Keeling) Islands"}, new WorldCountries { CountryCode = "CO", CountryName = "Colombia"}, new WorldCountries { CountryCode = "KM", CountryName = "Comoros"}, new WorldCountries { CountryCode = "CG", CountryName = "Congo"}, new WorldCountries { CountryCode = "CK", CountryName = "Cook Islands"}, new WorldCountries { CountryCode = "CR", CountryName = "Costa Rica"}, new WorldCountries { CountryCode = "HR", CountryName = "Croatia"}, new WorldCountries { CountryCode = "CU", CountryName = "Cuba"}, new WorldCountries { CountryCode = "CW", CountryName = "Curaçao"}, new WorldCountries { CountryCode = "CY", CountryName = "Cyprus"}, new WorldCountries { CountryCode = "CZ", CountryName = "Czech Republic"}, new WorldCountries { CountryCode = "DK", CountryName = "Denmark"}, new WorldCountries { CountryCode = "DJ", CountryName = "Djibouti"}, new WorldCountries { CountryCode = "DM", CountryName = "Dominica"}, new WorldCountries { CountryCode = "DO", CountryName = "Dominican Republic"}, new WorldCountries { CountryCode = "EC", CountryName = "Ecuador"}, new WorldCountries { CountryCode = "EG", CountryName = "Egypt"}, new WorldCountries { CountryCode = "SV", CountryName = "El Salvador"}, new WorldCountries { CountryCode = "GQ", CountryName = "Equatorial Guinea"}, new WorldCountries { CountryCode = "ER", CountryName = "Eritrea"}, new WorldCountries { CountryCode = "EE", CountryName = "Estonia"}, new WorldCountries { CountryCode = "ET", CountryName = "Ethiopia"}, new WorldCountries { CountryCode = "FK", CountryName = "Falkland Islands (Malvinas)"}, new WorldCountries { CountryCode = "FO", CountryName = "Faroe Islands"}, new WorldCountries { CountryCode = "FJ", CountryName = "Fiji"}, new WorldCountries { CountryCode = "FI", CountryName = "Finland"}, new WorldCountries { CountryCode = "FR", CountryName = "France"}, new WorldCountries { CountryCode = "GF", CountryName = "French Guiana"}, new WorldCountries { CountryCode = "PF", CountryName = "French Polynesia"}, new WorldCountries { CountryCode = "TF", CountryName = "French Southern Territories"}, new WorldCountries { CountryCode = "GA", CountryName = "Gabon"}, new WorldCountries { CountryCode = "GM", CountryName = "Gambia"}, new WorldCountries { CountryCode = "GE", CountryName = "Georgia"}, new WorldCountries { CountryCode = "DE", CountryName = "Germany"}, new WorldCountries { CountryCode = "GH", CountryName = "Ghana"}, new WorldCountries { CountryCode = "GI", CountryName = "Gibraltar"}, new WorldCountries { CountryCode = "GR", CountryName = "Greece"}, new WorldCountries { CountryCode = "GL", CountryName = "Greenland"}, new WorldCountries { CountryCode = "GD", CountryName = "Grenada"}, new WorldCountries { CountryCode = "GP", CountryName = "Guadeloupe"}, new WorldCountries { CountryCode = "GU", CountryName = "Guam"}, new WorldCountries { CountryCode = "GT", CountryName = "Guatemala"}, new WorldCountries { CountryCode = "GG", CountryName = "Guernsey"}, new WorldCountries { CountryCode = "GN", CountryName = "Guinea"}, new WorldCountries { CountryCode = "GW", CountryName = "Guinea-Bissau"}, new WorldCountries { CountryCode = "GY", CountryName = "Guyana"}, new WorldCountries { CountryCode = "HT", CountryName = "Haiti"}, new WorldCountries { CountryCode = "HM", CountryName = "Heard Island and McDonald Islands"}, new WorldCountries { CountryCode = "VA", CountryName = "Holy See (Vatican City State)"}, new WorldCountries { CountryCode = "HN", CountryName = "Honduras"}, new WorldCountries { CountryCode = "HK", CountryName = "Hong Kong"}, new WorldCountries { CountryCode = "HU", CountryName = "Hungary"}, new WorldCountries { CountryCode = "IS", CountryName = "Iceland"}, new WorldCountries { CountryCode = "IN", CountryName = "India"}, new WorldCountries { CountryCode = "ID", CountryName = "Indonesia"}, new WorldCountries { CountryCode = "IR", CountryName = "Iran"}, new WorldCountries { CountryCode = "IQ", CountryName = "Iraq"}, new WorldCountries { CountryCode = "IE", CountryName = "Ireland"}, new WorldCountries { CountryCode = "IM", CountryName = "Isle of Man"}, new WorldCountries { CountryCode = "IL", CountryName = "Israel"}, new WorldCountries { CountryCode = "IT", CountryName = "Italy"}, new WorldCountries { CountryCode = "JM", CountryName = "Jamaica"}, new WorldCountries { CountryCode = "JP", CountryName = "Japan"}, new WorldCountries { CountryCode = "JE", CountryName = "Jersey"}, new WorldCountries { CountryCode = "JO", CountryName = "Jordan"}, new WorldCountries { CountryCode = "KZ", CountryName = "Kazakhstan"}, new WorldCountries { CountryCode = "KE", CountryName = "Kenya"}, new WorldCountries { CountryCode = "KI", CountryName = "Kiribati"}, new WorldCountries { CountryCode = "KP", CountryName = "Korea"}, new WorldCountries { CountryCode = "KW", CountryName = "Kuwait"}, new WorldCountries { CountryCode = "KG", CountryName = "Kyrgyzstan"}, new WorldCountries { CountryCode = "LV", CountryName = "Latvia"}, new WorldCountries { CountryCode = "LB", CountryName = "Lebanon"}, new WorldCountries { CountryCode = "LS", CountryName = "Lesotho"}, new WorldCountries { CountryCode = "LR", CountryName = "Liberia"}, new WorldCountries { CountryCode = "LY", CountryName = "Libya"}, new WorldCountries { CountryCode = "LI", CountryName = "Liechtenstein"}, new WorldCountries { CountryCode = "LT", CountryName = "Lithuania"}, new WorldCountries { CountryCode = "LU", CountryName = "Luxembourg"}, new WorldCountries { CountryCode = "MO", CountryName = "Macao"}, new WorldCountries { CountryCode = "MK", CountryName = "Macedonia"}, new WorldCountries { CountryCode = "MG", CountryName = "Madagascar"}, new WorldCountries { CountryCode = "MW", CountryName = "Malawi"}, new WorldCountries { CountryCode = "MY", CountryName = "Malaysia"}, new WorldCountries { CountryCode = "MV", CountryName = "Maldives"}, new WorldCountries { CountryCode = "ML", CountryName = "Mali"}, new WorldCountries { CountryCode = "MT", CountryName = "Malta"}, new WorldCountries { CountryCode = "MH", CountryName = "Marshall Islands"}, new WorldCountries { CountryCode = "MQ", CountryName = "Martinique"}, new WorldCountries { CountryCode = "MR", CountryName = "Mauritania"}, new WorldCountries { CountryCode = "MU", CountryName = "Mauritius"}, new WorldCountries { CountryCode = "YT", CountryName = "Mayotte"}, new WorldCountries { CountryCode = "MX", CountryName = "Mexico"}, new WorldCountries { CountryCode = "FM", CountryName = "Micronesia"}, new WorldCountries { CountryCode = "MD", CountryName = "Moldova"}, new WorldCountries { CountryCode = "MC", CountryName = "Monaco"}, new WorldCountries { CountryCode = "MN", CountryName = "Mongolia"}, new WorldCountries { CountryCode = "ME", CountryName = "Montenegro"}, new WorldCountries { CountryCode = "MS", CountryName = "Montserrat"}, new WorldCountries { CountryCode = "MA", CountryName = "Morocco"}, new WorldCountries { CountryCode = "MZ", CountryName = "Mozambique"}, new WorldCountries { CountryCode = "MM", CountryName = "Myanmar"}, new WorldCountries { CountryCode = "NA", CountryName = "Namibia"}, new WorldCountries { CountryCode = "NR", CountryName = "Nauru"}, new WorldCountries { CountryCode = "NP", CountryName = "Nepal"}, new WorldCountries { CountryCode = "NL", CountryName = "Netherlands"}, new WorldCountries { CountryCode = "NC", CountryName = "New Caledonia"}, new WorldCountries { CountryCode = "NZ", CountryName = "New Zealand"}, new WorldCountries { CountryCode = "NI", CountryName = "Nicaragua"}, new WorldCountries { CountryCode = "NE", CountryName = "Niger"}, new WorldCountries { CountryCode = "NG", CountryName = "Nigeria"}, new WorldCountries { CountryCode = "NU", CountryName = "Niue"}, new WorldCountries { CountryCode = "NF", CountryName = "Norfolk Island"}, new WorldCountries { CountryCode = "MP", CountryName = "Northern Mariana Islands"}, new WorldCountries { CountryCode = "NO", CountryName = "Norway"}, new WorldCountries { CountryCode = "OM", CountryName = "Oman"}, new WorldCountries { CountryCode = "PK", CountryName = "Pakistan"}, new WorldCountries { CountryCode = "PW", CountryName = "Palau"}, new WorldCountries { CountryCode = "PS", CountryName = "Palestine"}, new WorldCountries { CountryCode = "PA", CountryName = "Panama"}, new WorldCountries { CountryCode = "PG", CountryName = "Papua New Guinea"}, new WorldCountries { CountryCode = "PY", CountryName = "Paraguay"}, new WorldCountries { CountryCode = "PE", CountryName = "Peru"}, new WorldCountries { CountryCode = "PH", CountryName = "Philippines"}, new WorldCountries { CountryCode = "PN", CountryName = "Pitcairn"}, new WorldCountries { CountryCode = "PL", CountryName = "Poland"}, new WorldCountries { CountryCode = "PT", CountryName = "Portugal"}, new WorldCountries { CountryCode = "PR", CountryName = "Puerto Rico"}, new WorldCountries { CountryCode = "QA", CountryName = "Qatar"}, new WorldCountries { CountryCode = "RE", CountryName = "Réunion"}, new WorldCountries { CountryCode = "RO", CountryName = "Romania"}, new WorldCountries { CountryCode = "RU", CountryName = "Russian Federation"}, new WorldCountries { CountryCode = "RW", CountryName = "Rwanda"}, new WorldCountries { CountryCode = "BL", CountryName = "Saint Barthélemy"}, new WorldCountries { CountryCode = "KN", CountryName = "Saint Kitts and Nevis"}, new WorldCountries { CountryCode = "LC", CountryName = "Saint Lucia"}, new WorldCountries { CountryCode = "MF", CountryName = "Saint Martin (French part)"}, new WorldCountries { CountryCode = "PM", CountryName = "Saint Pierre and Miquelon"}, new WorldCountries { CountryCode = "VC", CountryName = "Saint Vincent and the Grenadines"}, new WorldCountries { CountryCode = "WS", CountryName = "Samoa"}, new WorldCountries { CountryCode = "SM", CountryName = "San Marino"}, new WorldCountries { CountryCode = "ST", CountryName = "Sao Tome and Principe"}, new WorldCountries { CountryCode = "SA", CountryName = "Saudi Arabia"}, new WorldCountries { CountryCode = "SN", CountryName = "Senegal"}, new WorldCountries { CountryCode = "RS", CountryName = "Serbia"}, new WorldCountries { CountryCode = "SC", CountryName = "Seychelles"}, new WorldCountries { CountryCode = "SL", CountryName = "Sierra Leone"}, new WorldCountries { CountryCode = "SG", CountryName = "Singapore"}, new WorldCountries { CountryCode = "SX", CountryName = "Sint Maarten (Dutch part)"}, new WorldCountries { CountryCode = "SK", CountryName = "Slovakia"}, new WorldCountries { CountryCode = "SI", CountryName = "Slovenia"}, new WorldCountries { CountryCode = "SB", CountryName = "Solomon Islands"}, new WorldCountries { CountryCode = "SO", CountryName = "Somalia"}, new WorldCountries { CountryCode = "ZA", CountryName = "South Africa"}, new WorldCountries { CountryCode = "GS", CountryName = "South Georgia and the South Sandwich Islands"}, new WorldCountries { CountryCode = "SS", CountryName = "South Sudan"}, new WorldCountries { CountryCode = "ES", CountryName = "Spain"}, new WorldCountries { CountryCode = "LK", CountryName = "Sri Lanka"}, new WorldCountries { CountryCode = "SD", CountryName = "Sudan"}, new WorldCountries { CountryCode = "SR", CountryName = "Suriname"}, new WorldCountries { CountryCode = "SJ", CountryName = "Svalbard and Jan Mayen"}, new WorldCountries { CountryCode = "SZ", CountryName = "Swaziland"}, new WorldCountries { CountryCode = "SE", CountryName = "Sweden"}, new WorldCountries { CountryCode = "CH", CountryName = "Switzerland"}, new WorldCountries { CountryCode = "SY", CountryName = "Syrian Arab Republic"}, new WorldCountries { CountryCode = "TW", CountryName = "Taiwan"}, new WorldCountries { CountryCode = "TJ", CountryName = "Tajikistan"}, new WorldCountries { CountryCode = "TZ", CountryName = "Tanzania"}, new WorldCountries { CountryCode = "TH", CountryName = "Thailand"}, new WorldCountries { CountryCode = "TL", CountryName = "Timor-Leste"}, new WorldCountries { CountryCode = "TG", CountryName = "Togo"}, new WorldCountries { CountryCode = "TK", CountryName = "Tokelau"}, new WorldCountries { CountryCode = "TO", CountryName = "Tonga"}, new WorldCountries { CountryCode = "TT", CountryName = "Trinidad and Tobago"}, new WorldCountries { CountryCode = "TN", CountryName = "Tunisia"}, new WorldCountries { CountryCode = "TR", CountryName = "Turkey"}, new WorldCountries { CountryCode = "TM", CountryName = "Turkmenistan"}, new WorldCountries { CountryCode = "TC", CountryName = "Turks and Caicos Islands"}, new WorldCountries { CountryCode = "TV", CountryName = "Tuvalu"}, new WorldCountries { CountryCode = "UG", CountryName = "Uganda"}, new WorldCountries { CountryCode = "UA", CountryName = "Ukraine"}, new WorldCountries { CountryCode = "AE", CountryName = "United Arab Emirates"}, new WorldCountries { CountryCode = "GB", CountryName = "United Kingdom"}, new WorldCountries { CountryCode = "US", CountryName = "United States"}, new WorldCountries { CountryCode = "UM", CountryName = "United States Minor Outlying Islands"}, new WorldCountries { CountryCode = "UY", CountryName = "Uruguay"}, new WorldCountries { CountryCode = "UZ", CountryName = "Uzbekistan"}, new WorldCountries { CountryCode = "VU", CountryName = "Vanuatu"}, new WorldCountries { CountryCode = "VE", CountryName = "Venezuela"}, new WorldCountries { CountryCode = "VN", CountryName = "Viet Nam"}, new WorldCountries { CountryCode = "VG", CountryName = "British Virgin Islands"}, new WorldCountries { CountryCode = "VI", CountryName = "US Virgin Islands"}, new WorldCountries { CountryCode = "WF", CountryName = "Wallis and Futuna"}, new WorldCountries { CountryCode = "EH", CountryName = "Western Sahara"}, new WorldCountries { CountryCode = "YE", CountryName = "Yemen"}, new WorldCountries { CountryCode = "ZM", CountryName = "Zambia"}, new WorldCountries { CountryCode = "ZW", CountryName = "Zimbabwe"}, }; } }
دریافت کد کامل این پروژه