随时随地访问树莓派

一、路由器分配固定IP

        1.打开路由器管理界面192.168.199.1, IP地址根据不同厂商的不同型号决定;

word-image.png

        2.打开DHCP服务, 将树梅派MAC地址与IP绑定;

word-image-1.png

二、配置端口映射

        1.极路由需要使用端口转发插件实现,其它厂商路由器一般自带端口转发功能;

word-image-2.png

        2.选择超级端口转发,配置端口映射;

word-image-3.png

        3.配置公网IP端口与内网IP端口映射关系,使用自定义端口提高安全性

word-image-4.png

三、实时获取公网IP

        1.通过访问互联网PHP页面获取本地出口ip信息;

        https://www.learntoshare.top/clientip.php

        2.编写脚本将IP地址写入本地文件,且每次执行会自动删除上次记录;

#!/bin/sh
rm /tmp/getip
wget -q http://members.3322.org/dyndns/getip -P /tmp/

        3.编写脚本将IP地址上传至服务器或发送邮件

#!/bin/bash
#通过scp命令上传IP文件(本地存有远端服务器的ssh秘钥才能免密码scp)
echo "=======================scp ip address================="
ip_addr=$1
echo $ip_addr
scp /tmp/getip root@host.learntoshare.top:/var/www/wordpress/getip
#!/bin/bash
#通过mutt发送邮件到邮箱
echo "=====================sending email================="
ip_addr=$1
echo $ip_addr
cat getip | mutt -s "Raspberry Pi Change IP" 719528774@qq.com

       4.通过C语音编写判断语句实现IP检测功能

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void send_mail(char* ip){
	char cmd[1000] = {};
	sprintf(cmd,"./sendmail \"%s\"", ip);
	printf("cmd is: \"%s\"\n", cmd);
	system(cmd);
}
void scp_ip(char* ip){
	char cmd[1000] = {};
	printf("ip is: \"%s\"\n", ip);
	sprintf(cmd,"sh /mybin/scpip \"%s\"", ip);
	printf("cmd is: \"%s\"\n", cmd);
	system(cmd);
}
int main(){
	FILE* fpRead      = NULL;
	char  tmIP[1000]  = {};	
	char  tmIP2[1000] = {};
	int   ran         = 0;
	while(1)
	{
		printf("------------------------------get ip ...--------------------------\n");
		system("sh /mybin/getipx");
		fpRead = fopen("/tmp/getip", "r");
		if(fpRead)
		{
			fscanf(fpRead, "%s", tmIP);
			printf("get ip is: %s\n", tmIP);
			if(strcmp(tmIP, tmIP2) != 0)
			{
				printf("ip changed to: %s , scp ip adderss...\n", tmIP);
				strcpy(tmIP2,tmIP);
				//send mail 
				//send_mail(tmIP2);		
				scp_ip(tmIP2);			
			}else{
				printf("IP NO Change!\n");
			}
			fclose(fpRead);
		}
		ran = rand()%15;
		ran = 20+ran;
		printf("sleep %d s\n",ran );
		sleep( ran);
	}
	return 0;
}

        5.使用gcc将源码编译为可执行文件

# gcc -o postipx postipx.c

        6.手动执行一次/mybin/postipx,效果如下

word-image-5.png

        7.打开网页验证IP地址上传成功

        https://www.learntoshare.top/getip

word-image-6.png

     8.将程序加入时间计划每天早上八点运行

# crontab -e
0 8 * * * root /mybin/postipx >/dev/null &

四、实现原理

       使用system()函数调用脚本获取IP地址信息,使用fopen()函数获取文件中IP地址并写入变量fpRead;若内容不为零,使用fscanf()函数将IP地址读入tmIP字符串变量中;使用strcmp()函数比较tmIP、tmIP2两个字符串,若字符串不同返回值非零,通strcpy()函数将IP地址写入tmIP2字符串变量中,并使用SCP脚本将IP地址文件上传至服务器;若字符串相同返回值为零,清空fpRead变量挂起数秒后执行循环;

       ps:无限循环通过while (1)实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jefferylan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值