当前位置:   article > 正文

将家里的电脑变成服务器公网可访问-腾讯云-省钱大法_如何把家里另一台电脑做成服务器

如何把家里另一台电脑做成服务器

比如你部署了一个网站,你想亲朋好友能访问到你的网站。但是又不想花钱租服务器

大家都知道服务器租起来很贵,单独办公网ip端口更贵。自己用家里平常的电脑就可以公网访问。

花生壳也贵,用花生壳的内网穿透很卡,而且限制很多,除非付费。

其实最后都是没钱惹的货。反正我是一个穷光蛋,不知道你呢?所以咱们就用下面的省钱方案。

准备条件:

1.一台电脑(网线必须直联光猫)

2.电信宽带(必须是ipv4的,办后打1000号开通动态公网ip)

3.腾讯云(去腾讯云购买一个域名,然后填写用途,在上面操作,腾讯云还有管局审核)

操作

当你完成了上面的3项操作之后,咱们就可以开始了。首先你要知道怎么去域名解析。

在腾讯搜索域名解析,就可以到这个界面,然后自己添加,输入记录(前缀),和记录值(ip地址)

就可以解析。但是这是手动的。因为我们是动态ip,没钱搞固定ip

所以需要写个脚本。定时刷新修改它。写脚本容易,就http请求,用各种语言都行,问题是怎么才能操作腾讯云呢?腾讯云很贴心,提供了对应的接口。可以用接口操作。


创建腾讯云秘钥地址

注意不要在网上找非腾讯云官方,帮你写好接口的,容易泄露key,最好像我一样跟着官方文档写接口。

账号登录 - DNSPod-免费智能DNS解析服务商-电信_网通_教育网,智能DNS

我的方法,选择腾讯云(Api秘钥),可以拿到后面需要执行的SecretIdSecretKey

调用后成功


1.在腾讯云【域名解析】添加一条记录,ip随便给

主机记录是www.shige(随便写的,这个就是访问的域名开头的内容)

记录值是ip地址(我随便写的)

2.接口调用获取域名对应的RecordId

为什么需要这个?因为腾讯云他修改需要这个参数,这个接口也是,得先去调另一个接口才能获取,我也头疼,为啥不一个接口写过来。

跳转到【获取域名的解析记录列表

step: 进入 API Explorer -> 获取域名的解析记录列表里 -> 输入域名(Domain) 还有主机记录(Subdomain) -> 点击发送请求

得到响应结果,响应结果里面找到RecordId

3.接口调用修改ip地址

跳转到修改记录

选择修改记录->JSON格式->填入信息还有rewardId,发送请求

ps:我截图少些了个subDomain(主机记录)他默认会给你改成@,我补上了,以我的json为准

这里对应的是腾讯云的域名解析操作

{
  "Domain": "域名",
  "DomainId": null,
  "SubDomain": "shige",
  "RecordType": "A",
  "RecordLine": "默认",

  "RecordLineId": null,
  "Value": "ip地址",
  "MX": null,
  "TTL": 600,
  "Weight": null,
  "Status": null,
  "RecordId": 刚刚获取的recordId填写数字,
  "Remark": null
}

看一下控制台,成功!

4.代码(整体)

我用的java,然后选的是sdk,如果担心腾讯云也不安全的话,那你就选择httpRequest,然后选择对应的语言,SDK信息里面按钮 有集成方法。

java代码,引入pom文件
  1. # 版本在maven生效需要时间,如获取不到对应的版本,可以调低版本号
  2. <dependency>
  3. <groupId>com.tencentcloudapi</groupId>
  4. <artifactId>tencentcloud-sdk-java-dnspod</artifactId>
  5. <version>3.1.947</version>
  6. </dependency>

复制他的代码(你填写好就可以自己复制了)

  1. package com.tencent;
  2. import com.tencentcloudapi.common.Credential;
  3. import com.tencentcloudapi.common.profile.ClientProfile;
  4. import com.tencentcloudapi.common.profile.HttpProfile;
  5. import com.tencentcloudapi.common.exception.TencentCloudSDKException;
  6. import com.tencentcloudapi.dnspod.v20210323.DnspodClient;
  7. import com.tencentcloudapi.dnspod.v20210323.models.*;
  8. public class Sample
  9. {
  10. public static void main(String [] args) {
  11. try{
  12. // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
  13. // 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305
  14. // 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
  15. Credential cred = new Credential("SecretId", "SecretKey");
  16. // 实例化一个http选项,可选的,没有特殊需求可以跳过
  17. HttpProfile httpProfile = new HttpProfile();
  18. httpProfile.setEndpoint("dnspod.tencentcloudapi.com");
  19. // 实例化一个client选项,可选的,没有特殊需求可以跳过
  20. ClientProfile clientProfile = new ClientProfile();
  21. clientProfile.setHttpProfile(httpProfile);
  22. // 实例化要请求产品的client对象,clientProfile是可选的
  23. DnspodClient client = new DnspodClient(cred, "", clientProfile);
  24. // 实例化一个请求对象,每个接口都会对应一个request对象
  25. ModifyRecordRequest req = new ModifyRecordRequest();
  26. req.setDomain("域名");
  27. req.setSubDomain("www.shige");
  28. req.setRecordType("A");
  29. req.setRecordLine("默认");
  30. req.setValue("ip地址");
  31. req.setRecordId(recordId);//末尾要加L
  32. // 返回的resp是一个ModifyRecordResponse的实例,与请求对象对应
  33. ModifyRecordResponse resp = client.ModifyRecord(req);
  34. // 输出json格式的字符串回包
  35. System.out.println(ModifyRecordResponse.toJsonString(resp));
  36. } catch (TencentCloudSDKException e) {
  37. System.out.println(e.toString());
  38. }
  39. }
  40. }

我自己写了一个定时器,然后扫本地公网ip,调用这个方法。这里的脚本就很简单了,和域名解析没关系了,自己写吧。

注意:腾讯云的api调用的收费是前一年免费,大家可以白嫖,不过后面也很便宜,只要2块钱一个月,一年也才20块钱。

光猫操作

手动操作,端口配置

首先用网线连接你的光猫,用电脑连接,别用路由器。

然后登录光猫管理平台

192.168.1.1每个路由器可能有差别

光猫配置

WAN IP就是公网ip

然后选择端口映射,就可以把你本地的Ip端口映射到WAN IP上了

在端口列表就能看到你映射好的ip

代码动态模拟

为什么要用光猫获取?因为网上通过请求别人的地址返回的Ip都是经过转发的不准。

代码获取光猫的动态ip,由于要用脚本动态解析,所以不能用手动去看wanlp。

首先进入光猫界面f12,查看他的代码请求地址。找到接口

http://192.168.1.1/cgi-bin/luci/admin/settings/gwinfo?get=part

他会有个cookie值,用来校验是否正确。所以这里要模拟登录,获取cookie。

模拟登录

先开启日志输入密码,看接口是哪个是登录,参数怎么写。

然后看他的前端代码找到了。之后调用他的接口,和参数就能登录进去,然后发现他是用cookie登录的,登录后就会返回cookie,我们在拿这个cookie返回。每次用完记得调用下退出接口,清空cookie,防止多次登录的情况。

参数名称是username和psd

拿到cookie(他用的是sysauth为key的cookie)

登录获取cookie的代码

  1. # coding=UTF-8
  2. import requests
  3. # 登录URL,看网站接口f12
  4. login_url = 'http://192.168.1.1/cgi-bin/luci/admin/login'
  5. # 登录所需的表单数据,参数要自己看网站前端代码f12
  6. login_data = {
  7. 'username': 'useradmin',
  8. 'psd': 'xxxxx'
  9. }
  10. # 使用session对象,它会自动处理Cookies
  11. with requests.Session() as session:
  12. # 发送POST请求进行登录
  13. response = session.post(login_url, data=login_data)
  14. # 检查是否登录成功
  15. # 这里的判断条件可能需要根据实际情况调整
  16. if response.status_code == 200:
  17. print("网站内容"+response.text)
  18. # 获取此时session中的cookies
  19. cookies = session.cookies.get_dict()
  20. # 打印所有cookie键值对
  21. for name, value in cookies.items():
  22. print(f'{name} -> {value}')
  23. else:
  24. print('Login failed')

获取公网Ip代码

有了cookie,其他的就简单了,请求的时候把cookies带过去就行

先写退出登录的代码,先看接口

发现他是存储在header里面调用的退出登录

然后我发现不用做退出,因为他是唯一的,如果你登录过了,那么他就会被挤掉。所以退出的我就没有写,这个要看不同光猫的规则,我是电信的。

获取ip的代码

  1. def getIp(sysauthValue):
  2. #这个是获取Ip的接口,登录成功了f12自己看
  3. url = "http://192.168.1.1/cgi-bin/luci/admin/settings/gwinfo?get=part"
  4. # 创建会话对象,设置cookies和请求头
  5. session = requests.Session()
  6. session.headers.update({'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36'})
  7. session.get(url)# 构造POST请求数据
  8. # 发送POST请求,进行登录
  9. # 已知的Cookie
  10. cookies = {
  11. 'sysauth': sysauthValue
  12. # 根据实际需要添加更多的cookie
  13. }
  14. session.cookies.update(cookies)
  15. response = session.get(url)# 检查响应状态码,确认是否登录成功
  16. if response.status_code == 200:
  17. # print('登录成功!')
  18. print(response.text)
  19. else:
  20. print('登录失败,状态码:', response.status_code)

测试

成功

从返回值中拿到了公网ip

剩下的自己在写一个脚本把腾讯云域名的代码和这个光猫ip代码连起来就行了

ip测试

然后本机启动服务,通过公网Ip:端口访问

注意:端口可能被其他人占用,你要输入一个不常用的端口。

       如果是从光猫配置端口,不能用局域网的电脑访问此公网Ip,只能用其他的网络访问本机的公网ip

本机启动服务。

测试公网ip访问,用手机浏览器的流量访问

参考:

腾讯云地址

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/1005651
推荐阅读
相关标签
  

闽ICP备14008679号