赞
踩
内网穿透是一种技术,可以让外网用户通过互联网访问内网服务,其用途非常广泛。下面列举几个常见的内网穿透用途:
远程办公:在远程办公的情况下,员工需要访问公司内网的资源,如文件、ERP、财务软件、数据库、邮件等。
网络游戏:有些网络游戏需要在内网中进行局域网游戏,但是由于玩家之间的距离较远,无法直接连接到同一内网中。
远程控制:有些设备或机器需要通过内网连接,例如摄像头、NAS存储、智能家居等。
这些场景都可以通过内网穿透来解决,不需要公网IP,也不用设置路由器,本地环境配置一个内网穿透工具即可。
而市面上已经有很多成熟的内网穿透工具,本文盘点了国内免费使用的国产最强内网穿透软件,可以参考选择适合的工具来下载使用,排名不分先后。
官网地址:https://hsk.oray.com/
基本信息
免费版功能
免费带宽:1M
免费隧道:2条
限制流量:1G/月
并发连接数:50个
访问地址不强制改变
支持操作系统:windows (有界面客户端)
支持操作系统:Linux
优点
缺点
官网地址:https://www.shenzhuohl.com/chuantou.html
基本信息
免费版功能
免费带宽:1M
免费隧道:2条
并发连接数:50个
每月不限制流量
访问地址不强制改变
支持操作系统:windows (有界面客户端)
支持操作系统:Linux
优点
缺点
免费版只有 5M带宽
下面分享几个 多语言的WEB应用
Java 实现一个WEB登陆应用程序
以下是一个简单的Java Web登陆应用程序的示例:
1.创建一个名为 “LoginServlet” 的Servlet类,它将处理用户的登录请求并验证其凭据。
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class LoginServlet extends HttpServlet { private final String USERNAME = "admin"; private final String PASSWORD = "password"; public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); if (username.equals(USERNAME) && password.equals(PASSWORD)) { response.sendRedirect("success.jsp"); } else { response.sendRedirect("error.jsp"); } } }
2.创建一个名为 “login.jsp” 的JSP页面,它将显示登录表单并将表单数据提交给 “LoginServlet”。
<%@ page contentType="text/html; charset=UTF-8" %> <html> <head> <title>Login Page</title> </head> <body> <h1>Login Page</h1> <form action="LoginServlet" method="post"> <table> <tr> <td>Username:</td> <td><input type="text" name="username" /></td> </tr> <tr> <td>Password:</td> <td><input type="password" name="password" /></td> </tr> <tr> <td colspan="2" align="center"><input type="submit" value="Login" /></td> </tr> </table> </form> </body> </html>
<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head>
<title>Login Successful</title>
</head>
<body>
<h1>Login Successful</h1>
<p>Welcome <%= request.getParameter("username") %>!</p>
</body>
</html>
<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head>
<title>Login Error</title>
</head>
<body>
<h1>Login Error</h1>
<p>Invalid username or password.</p>
</body>
</html>
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
现在,您可以使用任何支持Java Web的服务器(如Tomcat)来部署并运行此应用程序。 用户将能够访问 “login.jsp” 页面,输入其凭据并尝试登录。如果凭据有效,他们将被重定向到 “success.jsp” 页面;否则,他们将被重定向到 “error.jsp” 页面。
package main import ( "crypto/sha256" "encoding/hex" "html/template" "net/http" ) type User struct { Username string Password string } var users = []User{ {"user1", hashPassword("password1")}, {"user2", hashPassword("password2")}, } func main() { http.HandleFunc("/", handleIndex) http.HandleFunc("/login", handleLogin) http.ListenAndServe(":8080", nil) } func handleIndex(w http.ResponseWriter, r *http.Request) { t, _ := template.ParseFiles("index.html") t.Execute(w, nil) } func handleLogin(w http.ResponseWriter, r *http.Request) { username := r.FormValue("username") password := r.FormValue("password") for _, user := range users { if user.Username == username && user.Password == hashPassword(password) { setSession(w, username) http.Redirect(w, r, "/dashboard", http.StatusSeeOther) return } } http.Redirect(w, r, "/", http.StatusSeeOther) } func hashPassword(password string) string { hasher := sha256.New() hasher.Write([]byte(password)) return hex.EncodeToString(hasher.Sum(nil)) } func setSession(w http.ResponseWriter, username string) { session, _ := store.Get(r, "session-name") session.Values["username"] = username session.Save(r, w) }
在上述示例中,我们首先定义了一个 User 类型,用于保存用户的用户名和密码。然后我们创建了一个 users 变量,用于保存所有注册的用户。
在 main 函数中,我们使用 http.HandleFunc 函数将请求路由到相应的处理函数。在 handleIndex 函数中,我们将 index.html 文件解析为模板,并将其发送给客户端。
在 handleLogin 函数中,我们首先获取用户输入的用户名和密码,然后遍历 users 数组来查找匹配的用户。如果找到了匹配的用户,我们使用 setSession 函数将用户信息保存到 session 中,并将用户重定向到
from flask import Flask, render_template, request, redirect, session import hashlib app = Flask(__name__) app.secret_key = b'_5#y2L"F4Q8z\n\xec]/' users = { 'user1': hashlib.sha256(b'password1').hexdigest(), 'user2': hashlib.sha256(b'password2').hexdigest() } @app.route('/') def index(): return render_template('index.html') @app.route('/login', methods=['POST']) def login(): username = request.form['username'] password = request.form['password'] if username in users and users[username] == hashlib.sha256(password.encode('utf-8')).hexdigest(): session['username'] = username return redirect('/dashboard') else: return redirect('/') @app.route('/dashboard') def dashboard(): if 'username' in session: return render_template('dashboard.html', username=session['username']) else: return redirect('/') if __name__ == '__main__': app.run()
在上述示例中,我们首先使用 Flask 创建了一个应用程序对象,并设置了一个密钥,用于保护 session 数据的安全。然后我们创建了一个 users 字典,用于保存所有注册的用户。
在 index 函数中,我们返回一个包含登录表单的 HTML 页面。
在 login 函数中,我们首先获取用户输入的用户名和密码,然后使用 hashlib 模块中的 sha256 函数对密码进行哈希处理,将其转换为十六进制字符串并与保存的哈希值进行比较。如果密码匹配,我们使用 session 对象保存用户的用户名,并将用户重定向到仪表盘页面。否则,我们将用户重定向回登录页面。
在 dashboard 函数中,我们检查用户是否已登录。如果是,则返回一个包含用户名称的 HTML 页面。否则,我们将用户重定向回登录页面。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。