PHP获取DHCP分配的本机IP
在搭建本地环境的时候,需要用到多个设备,有服务器、打印机连接接设备等。因为DHCP动态分配IP,所以每次重连都会发生IP地址的变更。
解决办法就是将每个设备的本机IP上传到统一的地方保存。因为使用REMOTE_ADDR和HTTP_X_FORWARDED_FOR等方法获取到的有可能是客户端使用的代理服务器的IP地址,并非真正的本机IP,解决办法就是针对mac下的查看IP地址命令:ifconfig 和 windows下的ipconfig,然后使用正则表达式从中获取到ip地址信息。
主要用到正则和exec方法。
<?php
$server = 'http://server.com/admin.php/xxx';
$agent = $_SERVER['HTTP_USER_AGENT'];
$os = '';
if (strpos($agent, 'Macintosh') !== false) {
$os = 'mac';
}else{
$os = 'win';
}
switch ($os) {
case 'mac':
uploadMacIP();
break;
case 'win':
uploadWinIP();
default:
echo '未知操作系统类型';
break;
}
function uploadMacIP()
{
exec("whereis ifconfig",$out);
$command = $out[0]." en0";
exec($command, $output);
$ip = '';
foreach ($output as $k => $v) {
if(preg_match("/inet [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/", $v, $matches)){
if($matches[0]){
$ip = str_replace("inet ", "", $matches[0]);
}
}
}
if(!empty($ip)){
uploadIP($ip,'mac');
}
}
function uploadWinIP()
{
$command = "ipconfig";
exec($command, $output);
$ip = '';
foreach ($output as $k => $v) {
if(preg_match("/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/", $v, $matches)){
if($matches[0]){
$ip = $matches[0];
}
}
}
if(!empty($ip)){
uploadIP($ip,'win');
}
}
function uploadIP($ip,$os)
{
$type = ['mac'=>1,'win'=>2];
$data = [
'ip' => $ip,
'type' => $type[$os],
];
$url = $server.'/add-ip';
if(curl_post($url, $data)){
echo '<h1>IP地址上传成功</h1>';
}else{
echo '<h1>IP地址上传失败</h1>';
}
}
function curl_post($url,$data)
{
$url .= "?data=".json_encode($data);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
$server_output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if($server_output == "OK"){
return true;
}else{
return false;
}
}
?>
PHP获取DHCP分配的本机IP的更多相关文章
- 如何禁止虚拟机自动获取DHCP分配的ip地址
今天在看Hadoop视频学习的时候跟着视频里面修改ip地址,将虚拟机的ip地址修改为192.168.2.3,结果ifconfig显示ip地址为192.168.2.128,用物理主机去ping这两个ip ...
- html利用j获取局域网内的本机IP(根据客户端浏览器的ip获取)
根据客户端浏览器的ip获取 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type ...
- [转]详述DHCP服务器的三种IP分配方式
DHCP就是动态主机配置协议(Dynamic Host Configuration Protocol),它的目的就是为了减轻TCP/IP网络的规划.管理和维护的负担,解决IP地址空间缺乏问题.这种网络 ...
- 获取 dhcp IP 过程分析 - 每天5分钟玩转 OpenStack(91)
前面我们已经讨论了 DHCP agent 的配置以及 namespace 如何隔离 dnsmasq 服务,本节将以 cirros-vm1 为例分析获取 DHCP IP 的详细过程. 在创建 insta ...
- 获取本机IP地址
这里有两种方法: //获取本机IP - (NSString *)localIPAddress { NSString *localIP = nil; struct ifaddrs *addrs; ) { ...
- .net中c#获取本机IP地址实例代码
* 在使用前,一定要注意在头部加上引用: using System.Net; 代码如下: using System; using System.Collections.Generic; using S ...
- python未知网卡名情况下获取本机IP
import socket def get_ip(): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) try: # doesn't even ...
- 关于是用dotnet获取本机IP地址+计算机名的方法
印象中在maxscript帮助文档里找到过方法,但是当时没记下来.只能通过dotnet实现了. 如果电脑有无线网卡和本地连接,可能会出现乱码,也问了写dotnet的朋友,提供了一些思路,不过最终还是使 ...
- Oracle 支持在具有 DHCP 分配的 IP 地址的系统上进行安装
今天在安装Oracle 10g的时候,遇到了“ Oracle 支持在具有 DHCP 分配的 IP 地址的系统上进行安装” 这个问题,经过搜索,找到了解决方案,具体如下: win7下右键单机" ...
随机推荐
- java类中获取ServletContext的方法
起因是我想要获取一个相对路径,需要用到servletContext的getRealPath()方法,于是上网搜索,找到两种方法来获取ServletContext. 方法1:第一种方法是这样的: Ser ...
- Linux常用目录结构
此文引用自51CTO博客,博主snail_hf,原文地址<Linux系统目录详解(全而易懂)> 目录结构 / 根目录,处于Linux系统树形结构的最顶端,它是Linux文件系统的入口,所有 ...
- itextpdf添加非自带字体(例如微软雅黑)
找到需要的字体,例如 在windows系统中找到需要字体,本例使用微软雅黑,使用C:\\Windows\\Fonts\\msyh.ttf. 代码如下: /** * 创建pdf,使用微软雅黑字体 * * ...
- 虚拟机修改静态ip
1.设置虚拟机的网络选择方式,使用NAT模式,选择这个模式后网段与主机的网段不是一个网段,一般选择桥接模式 2.选择VMnet8, 去掉 使用本地DHCP服务将ip分配给虚拟机 这个选项,不然设置ip ...
- iOS开发解决json串中的NSNull类型
后端返回的数据中总会出现一些NSNull类型,当我们一处理程序就会崩溃,因此想到把返回的数据中的NSNull类型全部转换成@""空字符串.下面是转化方法: 1 自定义的几个方法:放 ...
- Vue.js(一)了解Vue
什么是Vue? 1.Vue.js是一个构建数据驱动的web界面的库.类似于Angularjs,在技术上,他重点集中在MVVM模式的View层,非常容易学习,非常容易和其他的库或已有的项目整合. 2.V ...
- iOS 去掉小数点后边多余的0
-(NSString*)removeFloatAllZero:(NSString*)string { NSString * testNumber = string; NSString * outNum ...
- .NET开发一个微信跳一跳辅助程序
昨天微信更新了,出现了一个小游戏"跳一跳",玩了一下 赶紧还蛮有意思的 但纯粹是拼手感的,玩了好久,终于搞了个135分拿了个第一名,没想到过一会就被朋友刷下去了,最高的也就200来 ...
- bzoj 4653: [Noi2016]区间
Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置.换句话说,就是使得存在一个 x ...
- Linux Centos7配置防火墙开启端口
在使用centos7安装完mysql.tomcat.nginx后,都需要配置防火墙才能正常访问. 下面系统的学习一下防火墙的配置. centos7默认使用firewall,需要关闭,然后使用iptab ...