随时随地访问树莓派

随时随地访问树莓派,第1张

随时随地访问树莓派

一、路由器分配固定IP

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

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

二、配置端口映射

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

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

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

三、实时获取公网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=
echo $ip_addr
scp /tmp/getip root@host.learntoshare.top:/var/www/wordpress/getip
#!/bin/bash
#通过mutt发送邮件到邮箱
echo "=====================sending email================="
ip_addr=
echo $ip_addr
cat getip | mutt -s "Raspberry Pi Change IP" 719528774@qq.com

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

#include 
#include 
#include 
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: %sn", 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 sn",ran );
		sleep( ran);
	}
	return 0;
}

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

# gcc -o postipx postipx.c

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

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

        https://www.learntoshare.top/getip

     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)实现

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5720101.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存