一、路由器分配固定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)实现
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)