IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 随时随地访问树莓派 -> 正文阅读

[系统运维]随时随地访问树莓派

一、路由器分配固定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)实现

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-02-01 20:59:17  更:2022-02-01 21:01:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 7:46:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码