用c#向ip138.com发信息查ip归属地,为什么有的正确,有的错误呀。
输入如 211.69.0.3 就能正确查出归属地。
输入如 221.142.245.144 查出的归属地的IP是就本机的,而不是所输入的。
错误在哪里呀?我刚学socket请各位帮忙看看。http://www.rrcz.com/webform1.aspx 改成asp.net了,大家试试看。代码好下:
IPAddress ip;
ip=IPAddress.Parse("61.145.121.115");IPEndPoint hostEP=new IPEndPoint(ip,80);
Socket socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
socket.Connect(hostEP);string strSend=
"POST /ips.asp HTTP/1.1\r\n"+
"Accept: */*\r\n"+
"Referer: http://www.ip138.com/\r\n"+
"Accept-Language: zh-cn\r\n"+
"Content-Type: application/x-www-form-urlencoded\r\n"+
"Accept-Encoding: gzip, deflate\r\n"+
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Maxthon; .NET CLR 1.1.4322; .NET CLR 2.0.50727)\r\n"+
"Host: www.ip138.com\r\n"+
"Content-Length: 22\r\n"+
"Connection: Close\r\n"+
"Cache-Control: no-cache\r\n"+
"Cookie: ASPSESSIONIDAATCSSDB=ELHAGJLCFNMGMENIMCOFJIMB\r\n"+
"\r\n"+
"ip="+textBox1.Text+"&action=2\r\n";
byte[] bytesSend=new byte[1024];
bytesSend=System.Text.Encoding.Default.GetBytes(strSend);
socket.Send(bytesSend,bytesSend.Length,0);string strReceive="";
byte[] receiveByte=new byte[1024];
int bytes=0;
while(true)
{
bytes=socket.Receive(receiveByte,receiveByte.Length,0);strReceive+=System.Text.Encoding.Default.GetString(receiveByte,0,bytes);
if (bytes<=0)
break;
}
socket.Shutdown(SocketShutdown.Both);
socket.Close();
//FileStream fs=new FileStream("c:\3.txt",FileMode.Create,FileAccess.ReadWrite);
//System.IO.StreamWriter sw=new StreamWriter(@"c:\4.txt",false);
//sw.Write(strReceive);
//sw.Close();string re1,re2;
int pos1,pos2;pos1=strReceive.IndexOf("查询结果1");
if (pos1>0)
{
pos2=pos1;
pos2+=5;
while(true)
{
if (strReceive.IndexOf("<",pos1,1)>0)
{re1="查询结果1"+strReceive.Substring(pos2,pos1-pos2);
break;
}
if (pos1>=strReceive.Length-1)
{
pos1=-2;
re1="查询结果1:未知IP!";
break;
}
else
pos1++;
}
}
else
re1="查询结果1:未知IP!";//////////////////////////////////////////////////////////////////////////
pos1=strReceive.IndexOf("查询结果2");
if (pos1>0)
{
pos2=pos1;
pos2+=5;
while(true)
{
if (strReceive.IndexOf("<",pos1,1)>0)
{re2="查询结果2"+strReceive.Substring(pos2,pos1-pos2);
break;
}
if (pos1>=strReceive.Length-1)
{
pos1=-2;
re2="查询结果2:未知IP!";
break;
}
else
pos1++;
}
}
else
re2="查询结果2:未知IP!";MessageBox.Show(re1);
MessageBox.Show(re2);
输入如 211.69.0.3 就能正确查出归属地。
输入如 221.142.245.144 查出的归属地的IP是就本机的,而不是所输入的。
错误在哪里呀?我刚学socket请各位帮忙看看。http://www.rrcz.com/webform1.aspx 改成asp.net了,大家试试看。代码好下:
IPAddress ip;
ip=IPAddress.Parse("61.145.121.115");IPEndPoint hostEP=new IPEndPoint(ip,80);
Socket socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
socket.Connect(hostEP);string strSend=
"POST /ips.asp HTTP/1.1\r\n"+
"Accept: */*\r\n"+
"Referer: http://www.ip138.com/\r\n"+
"Accept-Language: zh-cn\r\n"+
"Content-Type: application/x-www-form-urlencoded\r\n"+
"Accept-Encoding: gzip, deflate\r\n"+
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Maxthon; .NET CLR 1.1.4322; .NET CLR 2.0.50727)\r\n"+
"Host: www.ip138.com\r\n"+
"Content-Length: 22\r\n"+
"Connection: Close\r\n"+
"Cache-Control: no-cache\r\n"+
"Cookie: ASPSESSIONIDAATCSSDB=ELHAGJLCFNMGMENIMCOFJIMB\r\n"+
"\r\n"+
"ip="+textBox1.Text+"&action=2\r\n";
byte[] bytesSend=new byte[1024];
bytesSend=System.Text.Encoding.Default.GetBytes(strSend);
socket.Send(bytesSend,bytesSend.Length,0);string strReceive="";
byte[] receiveByte=new byte[1024];
int bytes=0;
while(true)
{
bytes=socket.Receive(receiveByte,receiveByte.Length,0);strReceive+=System.Text.Encoding.Default.GetString(receiveByte,0,bytes);
if (bytes<=0)
break;
}
socket.Shutdown(SocketShutdown.Both);
socket.Close();
//FileStream fs=new FileStream("c:\3.txt",FileMode.Create,FileAccess.ReadWrite);
//System.IO.StreamWriter sw=new StreamWriter(@"c:\4.txt",false);
//sw.Write(strReceive);
//sw.Close();string re1,re2;
int pos1,pos2;pos1=strReceive.IndexOf("查询结果1");
if (pos1>0)
{
pos2=pos1;
pos2+=5;
while(true)
{
if (strReceive.IndexOf("<",pos1,1)>0)
{re1="查询结果1"+strReceive.Substring(pos2,pos1-pos2);
break;
}
if (pos1>=strReceive.Length-1)
{
pos1=-2;
re1="查询结果1:未知IP!";
break;
}
else
pos1++;
}
}
else
re1="查询结果1:未知IP!";//////////////////////////////////////////////////////////////////////////
pos1=strReceive.IndexOf("查询结果2");
if (pos1>0)
{
pos2=pos1;
pos2+=5;
while(true)
{
if (strReceive.IndexOf("<",pos1,1)>0)
{re2="查询结果2"+strReceive.Substring(pos2,pos1-pos2);
break;
}
if (pos1>=strReceive.Length-1)
{
pos1=-2;
re2="查询结果2:未知IP!";
break;
}
else
pos1++;
}
}
else
re2="查询结果2:未知IP!";MessageBox.Show(re1);
MessageBox.Show(re2);
解决方案 »
- 怎么用网站实现模拟ASP.NET编译功能,就是把一段代码提交,返回编译是否成功的信息。
- 关于textbox焦点的问题
- C#封装dll中的结构体的疑惑
- 有没有相关的ADO.net访问不同数据库,调用享用方法或类的例子啊?
- 【请教】C#调用oracle中的exp.exe无法显示DOS下的屏幕输出
- 程序员一天的郁闷之六(静态方法什么时候用)
- 思归 帮忙 分析器错误信息: 未能开始监视对“\\192.*.*.*\a\C\Web\Module”的更改
- Help me! 在局域网中传递一个图形对象
- 如何实现复制使用中文件
- 关于调用外部程序时其子窗口移动范围
- 面试后一般多长时间能给回复(初级程序员,小公司)?
- C# 中StringBuilder的问题(急)
我輸入211.69.0.3就正確,河南省 新乡市 河南机电高等专科学校。
幫忙找找原因呀。