我所知道的是,我想创建一个在linux系统上运行的应用程序,它将收集系统的信息,如mac地址,hd& cpu id,操作系统版本和计算机名称,以及首次执行的时间戳,并将其全部哈希到一个id-key中。然后,它将在服务器上发送此ID,以便以后进行身份验证。现在每次客户端发出请求时,应用程序都会生成id-key并将其附加到请求中。然后服务器将进行身份验证。
我不知道是什么 a)我应该制作一个桌面可执行应用程序,还是在客户端的localhost上运行的Web应用程序,以及每个应用程序如何工作? b)使用哪种技术,意味着开发平台(php?) c)应用程序如何将id附加到每个客户端请求和 d)有什么准备好我可以尝试(还没有找到) 提前感谢您,有一个截止日期,我们将非常感谢您的帮助。
答案 0 :(得分:1)
@Stathis G。
要获取客户的信息,您可以在客户端的计算机上部署applet。
import java.applet.Applet;
import java.applet.Applet;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
public class app extends Applet{
public String macAddr="";
public void init()
{
try
{
System.out.println("Start");
InetAddress ip = InetAddress.getLocalHost();
System.out.println((new StringBuilder("Current IP address:"+ip.toString())));
NetworkInterface network = NetworkInterface.getByInetAddress(ip);
byte mac[] = network.getHardwareAddress();
System.out.println("mac : "+mac.toString());
System.out.print("Current MAC address : ");
StringBuilder sb = new StringBuilder();
for(int i = 0; i < mac.length; i++)
sb.append(String.format("%02X%s", new Object[] {
Byte.valueOf(mac[i]), i >= mac.length - 1 ? "" : "-"
}));
System.out.println(sb.toString());
macAddr=String.valueOf(sb);
System.out.println("okay good");
}
catch(SocketException e)
{
macAddr=e.toString();
e.printStackTrace();
System.out.println("not good");
}
catch (Exception e) {
macAddr=e.toString();
e.printStackTrace();
System.out.println("bad good");
}
}
}
制作这个小程序后我遇到的问题是[当我在本地机器上运行它(RUN AS APPLET)时工作正常],因为你必须在你的jar上签名,所以你不能在你的jar上签名
Keytool -genkey -alias signFiles -keystore compstore -keypass KEYPASS -dname“cn = XYZ”-storepass KEY -validity 125000 jarsigner -keystore compstore -storepass PASS -keypass KEYPASS appletname.jar signFiles
之后它工作但不顺利..每次我运行它。浏览器要求许可。这不好。我希望我的经验有所帮助
答案 1 :(得分:0)
可以使用哈希函数生成唯一键,但是您可能希望在服务器上创建键以防止人们对哈希函数进行逆向工程。多年前,我的一位朋友通过反编译源代码并查找序列号函数来删除游戏的复制保护。如果您将功能放在客户端上,那么他们可以改变它。