日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

c#语言呈现位置信息,c#实现根据网络IP显示地理位置功能示例

發布時間:2025/3/20 C# 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c#语言呈现位置信息,c#实现根据网络IP显示地理位置功能示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

用戶信息表,是大多數系統都有的。我們也知道,通常都會有類似 注冊IP 和 最后登錄IP 這兩個的字段,來存儲用戶注冊時候的IP地址和最后登錄的IP的地址。

獲取這樣的地址,在后臺顯示 xxx.xxx.xxx.xxx 的地址段,讓人看到很不自然,根本就不知道具體地理位置。

現在我們就簡單的實現一下這個功能。

用到了讀取純真IP數據庫的公用組件QQWry.NET 這個組件,作者阿不。(謝謝他的共享)

還要去下載最新的純真IP地址庫,下載獲得QQWry.dat

最后請出Js中的小靚妞,jquery-1.3.1.js

新建Web項目AjaxIP,將QQWry.dat添加到App_Data下。

然后添加QQWry.NET的組件類,如下:

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 using System;

using System.Collections.Generic;

using System.Text;

using System.IO;

using System.Text.RegularExpressions;

using System.Net;

using System.Net.Sockets;

namespace AjaxIP

{

public class IPLocation

{

public string IP { get; set; }

public string Country { get; set; }

public string Local { get; set; }

}

public class QQWryLocator

{

static Encoding encoding = Encoding.GetEncoding("GB2312");

private byte[] data;

int firstStartIpOffset;

int lastStartIpOffset;

int ipCount;

public int Count { get { return ipCount; } }

public QQWryLocator(string dataPath)

{

using (FileStream fs = new FileStream(dataPath, FileMode.Open, FileAccess.Read, FileShare.Read))

{

data = new byte[fs.Length];

fs.Read(data, 0, data.Length);

}

firstStartIpOffset = (int)data[0] + (((int)data[1]) << 8) + (((int)data[2]) << 16) + (((int)data[3]) << 24);

lastStartIpOffset = (int)data[4] + (((int)data[5]) << 8) + (((int)data[6]) << 16) + (((int)data[7]) << 24);

ipCount = (lastStartIpOffset - firstStartIpOffset) / 7 + 1;

if (ipCount <= 1)

{

throw new ArgumentException("ip FileDataError");

}

}

public static uint IpToInt(string ip)

{

//string[] strArray = ip.Split('.');

//return (uint.Parse(strArray[0]) << 24) + (uint.Parse(strArray[1]) << 16) + (uint.Parse(strArray[2]) << 8) + uint.Parse(strArray[0]);

//return (uint)IPAddress.HostToNetworkOrder((int)(IPAddress.Parse(ip).Address));

byte[] bytes = IPAddress.Parse(ip).GetAddressBytes();

return (uint)bytes[3] + (((uint)bytes[2]) << 8) + (((uint)bytes[1]) << 16) + (((uint)bytes[0]) << 24);

}

public static string IntToIP(uint ip_Int)

{

return new IPAddress(ip_Int).ToString();

}

public IPLocation Query(string ip)

{

IPAddress address = IPAddress.Parse(ip);

if (address.AddressFamily != AddressFamily.InterNetwork)

{

throw new ArgumentException("不支持非IPV4的地址");

}

if (IPAddress.IsLoopback(address))

{

return new IPLocation() { IP = ip, Country = "本機內部環回地址", Local = string.Empty };

}

uint intIP = (uint)IPAddress.HostToNetworkOrder((int)address.Address);

//if ((((intIP >= IpToInt("0.0.0.0")) && (intIP <= IpToInt("2.255.255.255"))) || ((intIP >= IpToInt("64.0.0.0")) && (intIP <= IpToInt("126.255.255.255")))) ||

//((intIP >= IpToInt("58.0.0.0")) && (intIP <= IpToInt("60.255.255.255"))))

//if (intIP <= 50331647 || (intIP >= 1073741824 && intIP <= 2130706431) || (intIP >= 973078528 && intIP <= 1023410175))

//{

// return new IPLocation() { IP = ip, Country = "網絡保留地址", Local = string.Empty };

//}

IPLocation ipLocation = new IPLocation() { IP = ip };

uint right = (uint)ipCount;

uint left = 0;

uint middle = 0;

uint startIp = 0;

uint endIpOff = 0;

uint endIp = 0;

int countryFlag = 0;

while (left < (right - 1))

{

middle = (right + left) / 2;

startIp = GetStartIp(middle, out endIpOff);

if (intIP == startIp)

{

left = middle;

break;

}

if (intIP > startIp)

{

left = middle;

}

else

{

right = middle;

}

}

startIp = GetStartIp(left, out endIpOff);

endIp = GetEndIp(endIpOff, out countryFlag);

if ((startIp <= intIP) && (endIp >= intIP))

{

string local;

ipLocation.Country = GetCountry(endIpOff, countryFlag, out local);

ipLocation.Local = local;

}

else

{

ipLocation.Country = "未知";

ipLocation.Local = string.Empty;

}

return ipLocation;

}

private uint GetStartIp(uint left, out uint endIpOff)

{

int leftOffset = (int)(firstStartIpOffset + (left * 7));

endIpOff = (uint)data[4 + leftOffset] + (((uint)data[5 + leftOffset]) << 8) + (((uint)data[6 + leftOffset]) << 16);

return (uint)data[leftOffset] + (((uint)data[1 + leftOffset]) << 8) + (((uint)data[2 + leftOffset]) << 16) + (((uint)data[3 + leftOffset]) << 24);

}

private uint GetEndIp(uint endIpOff, out int countryFlag)

{

countryFlag = data[4 + endIpOff];

return (uint)data[endIpOff] + (((uint)data[1 + endIpOff]) << 8) + (((uint)data[2 + endIpOff]) << 16) + (((uint)data[3 + endIpOff]) << 24);

}

///

/// Gets the country.

///

/// The end ip off.

/// The country flag.

/// The local.

/// country

private string GetCountry(uint endIpOff, int countryFlag, out string local)

{

string country = string.Empty;

uint offset = endIpOff + 4;

switch (countryFlag)

{

case 1:

case 2:

country = GetFlagStr(ref offset, ref countryFlag, ref endIpOff);

offset = endIpOff + 8;

local = (1 == countryFlag) ? string.Empty : GetFlagStr(ref offset, ref countryFlag, ref endIpOff);

break;

default:

country = GetFlagStr(ref offset, ref countryFlag, ref endIpOff);

local = GetFlagStr(ref offset, ref countryFlag, ref endIpOff);

break;

}

return country;

}

private string GetFlagStr(ref uint offset, ref int countryFlag, ref uint endIpOff)

{

int flag = 0;

while (true)

{

flag = data[offset];

//沒有重定向

if (flag != 1 && flag != 2)

{

break;

}

if (flag == 2)

{

countryFlag = 2;

endIpOff = offset - 4;

}

offset = (uint)data[1 + offset] + (((uint)data[2 + offset]) << 8) + (((uint)data[3 + offset]) << 16);

}

if (offset < 12)

{

return string.Empty;

}

return GetStr(ref offset);

}

///

/// 讀取字符串...

///

///

///

private string GetStr(ref uint offset)

{

byte lowByte = 0;

byte highByte = 0;

StringBuilder stringBuilder = new StringBuilder(16);

while (true)

{

lowByte = data[offset++];

if (lowByte == 0)

{

return stringBuilder.ToString();

}

if (lowByte > 0x7f)

{

highByte = data[offset++];

if (highByte == 0)

{

return stringBuilder.ToString();

}

stringBuilder.Append(encoding.GetString(new byte[] { lowByte, highByte }));

}

else

{

stringBuilder.Append((char)lowByte);

}

}

}

}

}

再來新建 IPSearch.ashx 文件,如下:

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 using System;

using System.Collections;

using System.Data;

using System.Linq;

using System.Web;

using System.Web.Services;

using System.Web.Services.Protocols;

using System.Xml.Linq;

namespace AjaxIP

{

///

/// IP查詢 的摘要說明

///

public class IPSearch : IHttpHandler

{

public void ProcessRequest(HttpContext context)

{

context.Response.ContentType = "text/plain";

string ip = context.Request["ip"];

string ipFilePath = @"\App_Data\QQWry.dat";

QQWryLocator QQWry = new QQWryLocator(ipFilePath);

IPLocation loc = QQWry.Query(ip);

context.Response.Write(string.Format("{0} {1}",loc.Country,loc.Local));

}

public bool IsReusable

{

get

{

return false;

}

}

}

}

最后在Default.aspx頁面寫下,js和有IP的用戶信息,如下:

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1

$(document).ready(function() {

$("#tb tr").each(function() {

var obj = $(this).children("td:eq(2)");

SearchIP(obj);

});

})

function SearchIP(obj) {

$.ajax({

type: "GET",

url: "IPSearch.ashx?ip=" + obj.text(),

success: function(data) {

obj.text(data);

}

});

}

321321321321321321

OMEGA

0

122.229.191.8

荒年

900,000

110.87.98.30

寒妃

1,854,257,979

220.188.193.72

哈小土

600,100

220.188.193.72

化妝造型

400,100

220.188.193.72

這樣我們的后臺用戶信息不再是不友好的IP地址段了。

運行一下,看看效果吧.

總結

以上是生活随笔為你收集整理的c#语言呈现位置信息,c#实现根据网络IP显示地理位置功能示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 18日本xxxxxxxxx95 国产又好看的毛片 | 国产一级视频在线播放 | 亚洲欧美在线免费 | 亚洲一区二区三区播放 | 男女午夜爽爽 | 日本a√在线观看 | 视频二区中文字幕 | 国产嫩草av | 狠狠干一区二区 | 免费无遮挡无码永久视频 | 亚洲无吗一区二区三区 | 欧美日国产 | 久久er99热精品一区二区介绍 | 91porny九色91啦中文 | 天天射天天干天天 | 久久av高潮av无av萌白 | 香蕉视频在线免费 | 婷婷久久综合网 | 777亚洲 | 久福利 | 婷婷综合激情 | 亚洲红桃视频 | 日韩高清国产一区在线 | 亚洲每日在线 | 国产特级毛片aaaaaa | 午夜视频免费看 | 超碰免费av | 欧美日韩黑人 | 天天做夜夜爱 | 小嫩女直喷白浆 | 宝贝乖h调教灌尿穿环 | 日韩欧美国产精品综合嫩v 国产小毛片 | 精品国模| 成人激情小视频 | 国产免费麻豆 | 亚洲综合色小说 | 国产成人久久77777精品 | 久久只有这里有精品 | 午夜精品美女久久久久av福利 | 日本欧美韩国国产精品 | 精品美女一区 | a人片| 三级网站 | 黄毛片在线观看 | 免费看国产片在线观看 | 天堂中文在线8 | 国产黑人 | 免播放器在线视频 | 一级片在线观看视频 | 中文字幕久久网 | 天天操天天干天天摸 | 国产在线综合视频 | 精品少妇久久久久久888优播 | 黑人性高潮 | 在线免费观看黄视频 | 快播久久 | 韩国黄色大片 | 中文字幕十一区 | 日韩最新在线 | 91欧美大片 | 一级特黄特色的免费大片视频 | 久久123 | 岛国二区三区 | 国产黄色91 | 国产精品久热 | 又黄又色又爽的视频 | 看片一区| 国产精品免费一区二区区 | 97碰| 成人av在线资源 | 成人av免费观看 | 中文字幕视频免费 | 黄色香蕉网站 | 日韩国产欧美在线视频 | 国产suv精品一区二区68 | 日韩网红少妇无码视频香港 | v8888av| 最新激情网站 | zoo性欧美 | 极品尤物一区二区 | 欧洲精品二区 | 国产无遮挡呻吟娇喘视频 | 国产黄色片在线播放 | av资源网址| 懂色av懂色av粉嫩av分享吧 | 人成精品 | 色狠狠一区二区 | 日韩一级欧美 | 欧美精品久久久 | 在线免费av观看 | 婷婷综合另类小说色区 | 一级片在线免费观看视频 | 久久久久久一区二区 | 久久综合九九 | 在线观看成人 | 午夜久久久久久久 | 视频一区二区三区在线观看 | 免费黄视频网站 | 涩涩视频免费看 |