日韩性视频-久久久蜜桃-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显示地理位置功能示例的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 丰满人妻一区二区三区在线 | 狠狠干男人的天堂 | 黄色图片小说 | 国产亚洲无 | 在线视频播放大全 | 日韩网站在线播放 | 欧美一区二区三区免费在线观看 | 欧美日韩黄色一区二区 | 在线观看欧美一区二区 | 欧美aⅴ在线| 激情国产一区 | 日本亚洲一区二区三区 | juliaannxxxxx高清 黄页网站在线播放 | 亚洲激情成人 | 国产femdom调教7777 | 软萌小仙自慰喷白浆 | 精品人伦一区二区三电影 | 青青草免费观看 | 日韩精品一二三四区 | 欧美性jizz18性欧美 | 99re6热在线精品视频播放 | 亚洲国产精品自拍视频 | 懂色av蜜臂av粉嫩av | 亚洲.www | 中文字幕一区二区三区人妻四季 | 亚洲 欧美 变态 另类 综合 | 6090伦理 | 无码人妻精品一区二区三区99日韩 | 日本成人社区 | 嫩草懂你| 欧美一区二区三区久久综合 | 亚洲中字在线 | 99这里精品| 国产传媒av | 亚洲免费激情视频 | a视频在线免费观看 | 色老头一区 | 日韩免费在线视频 | 日韩精品在线视频免费观看 | 国产第五页 | 玩弄丰满少妇xxxxx性多毛 | 精品久久久久久无码国产 | 狠狠干欧美 | proumb性欧美在线观看 | www国产精品| 日本道在线观看 | 可以免费观看av | 国产黄色在线播放 | 日韩毛片基地 | 成人极品| 在线观看jizz| 久久国内免费视频 | 国产一级二级三级在线观看 | bt天堂新版中文在线地址 | 把高贵美妇调教成玩物 | 四虎国产成人精品免费一女五男 | 在线观看91av | 天天看av | 成人h动漫精品一区二区器材 | 国产日日操 | 熟妇五十路六十路息与子 | 爱情岛论坛自拍 | 成人免费看片在线观看 | 色老头一区二区三区 | 久久不射网 | 特级毛片在线 | 日韩无遮挡 | 多男调教一女折磨高潮高h 国内毛片毛片毛片毛片毛片 | 性调教学院高h学校 | 99在线精品视频免费观看软件 | 国产一区二区三区高清视频 | 黑人一区二区三区四区五区 | 一级aaa毛片 | 欧美69精品久久久久久不卡 | 青青青国产在线 | 国产精品丝袜视频无码一区69 | 澳门黄色网 | 亚洲一区二区免费视频 | 顶级嫩模啪啪呻吟不断好爽 | 国产精品久久久99 | 免费成人在线观看 | 麻豆一区二区99久久久久 | 日韩欧美高清视频 | 黄色a一级| 高h视频在线观看 | 国产精品www. | 国内偷拍av | 国产伦精品一区二区三区视频免费 | 久久久蜜桃一区二区人 | 国产成人无码一区二区在线观看 | 岛国av噜噜噜久久久狠狠av | 欧美日韩a | 91免费国产视频 | 国产裸体无遮挡 | 图片区视频区小说区 | 欧美精品国产 | 亚洲人午夜射精精品日韩 | 88av视频 | 亚洲一区二区偷拍 |