这个是做不到的,因为在b.php这个页面看来,a.php和你都是客户端,客户端是没有能力伪造自己的ip的
网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、小程序设计、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了饶河免费建站欢迎大家使用!
换个思路的话,你可以在你本机部署个a.php,或者你的机器开代理,让a.php用代理的方式访问你的机器,然后再向b.php发起请求(我只能说出这个思路,但具体我实现不了,因为不会配置代理)
以前做过类似的,写个bat脚本,脚本功能查询ip,mac,输出到txt,放在网页上下载,用户下载后,在本地执行bat,然后将生成的txt上传。
要有一个触发事件, 可以选择打开你的网站主页或者登录之后.只要有触发事件.你就能获取到他的IP 直接存到数据库里就可以了.
接收指定IP的数据包,其他IP都要过滤吧,那就用防火墙来搞吧
使用的是client段的获取方式,用client的可以指定IP,代码大概如下
public void SendMessage()
{
ASCII = Encoding.ASCII;
// 构造用于发送的 字节缓冲.
Byte[] sendBytes = ASCII.GetBytes(SEND_MESSAGE);
// 构造用于接收的 字节缓冲.
Byte[] recvBytes = new Byte[256];
// IP地址.
IPAddress localAddr = IPAddress.Parse("192.168.19.81");
// 接入点.
IPEndPoint ephost = new IPEndPoint(localAddr, PORT);
// 第一个参数:AddressFamily = 指定 Socket 类的实例可以使用的寻址方案。
// Unspecified 未指定地址族。
// InterNetwork IP 版本 4 的地址。
// InterNetworkV6 IP 版本 6 的地址。
//
// 第二个参数:SocketType = 指定 Socket 类的实例表示的套接字类型。
// Stream 一个套接字类型,支持可靠、双向、基于连接的字节流,而不重复数据,也不保留边界。
// 此类型的 Socket 与单个对方主机通信,并且在通信开始之前需要建立远程主机连接。
// 此套接字类型使用传输控制协议 (Tcp),AddressFamily 可以是 InterNetwork,也可以是 InterNetworkV6。
//
// 第三个参数:ProtocolType = 指定 Socket 类支持的协议。
// Tcp 传输控制协议 (TCP)。
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
// 尝试连接主机.
s.Connect(ephost);
//Console.WriteLine("向服务器发送到了:{0}", SEND_MESSAGE);
// 向主机发送数据.
// s.Send(sendBytes, sendBytes.Length, SocketFlags.None);
// 接收服务器的应答.
Int32 bytes = s.Receive(recvBytes, recvBytes.Length, SocketFlags.None);
StringBuilder buff = new StringBuilder();
// while (bytes 0)
// {
// 将缓冲的字节数组,装换为字符串.
// String str = ASCII.GetString(recvBytes, 0, bytes);
String str = "";
for (int i = 0; i recvBytes.Length; i++)
{
str = str + recvBytes[i];
}
int iCount = 0;
iCount = int.Parse(str.Substring(13, 6)) ;
// 加入字符串缓存
buff.Append(str);
// 再次接受,看看后面还有没有数据.
//bytes = s.Receive(recvBytes, recvBytes.Length, SocketFlags.None);
// }
textBox1.Text = iCount.ToString();
}
catch (Exception ex)
{
MessageBox.Show("连接/发送/接收过程中,发生了错误!");
MessageBox.Show(ex.Message);
//Console.WriteLine("连接/发送/接收过程中,发生了错误!");
//Console.WriteLine(ex.Message);
//Console.WriteLine(ex.StackTrace);
}
finally
{
s.Close();
}
要看你是同步还是异步了,异步的话,每次发送都要走三次握手,再计算总时间
你要快就同步,同时发1000台计算机,不用等每一次的返回是否正确.
php是脚本语言,估计无法实现你这个愿望。
以前的高手是通过CGI来实现的,就是因为CGI是应用程序,安全性不好,所以后来才流行PHP这类脚本语言的(就好像以前电脑上都是administrator,现在都是用户自己的账户了一样)。