immortalwrt/package/jsda/njitclient/src/main.c
2019-09-30 13:42:16 +08:00

95 lines
2.3 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* File: main.c
* ------------
* 校园网802.1X客户端命令行
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
/* 子函数声明 */
int Authentication(const char *UserName, const char *Password, const char *DeviceName, const char *Version, const char *Key);
void convert(char *dest, char const *src);
/**
* 函数main()
*
* 检查程序的执行权限,检查命令行参数格式。
* 允许的调用格式包括:
* njit-client username password
* njit-client username password eth0
* njit-client username password eth1
* 若没有从命令行指定网卡则默认将使用eth0
*/
int main(int argc, char *argv[])
{
char *UserName;
char *Password;
char *DeviceName;
char *Version;
char *Key;
/* 检查当前是否具有root权限 */
if (getuid() != 0) {
fprintf(stderr, "抱歉运行本客户端程序需要root权限\n");
fprintf(stderr, "(RedHat/Fedora下使用su命令切换为root)\n");
fprintf(stderr, "(Ubuntu/Debian下在命令前添加sudo)\n");
exit(-1);
}
/* 检查命令行参数格式 */
if (argc<3 || argc>6) {
fprintf(stderr, "命令行参数错误!\n");
fprintf(stderr, "正确的调用格式例子如下:\n");
fprintf(stderr, " %s username password\n", argv[0]);
fprintf(stderr, " %s username password eth0\n", argv[0]);
fprintf(stderr, " %s username password eth0 version key\n", argv[0]);
fprintf(stderr, "(注若不指明网卡默认情况下将使用eth0.2)\n");
exit(-1);
} else {
if (argc > 3) {
DeviceName = argv[3]; // 允许从命令行指定设备名
} else {
DeviceName = "eth0.2"; // 缺省情况下使用的设备
}
if (argc > 5) {
Version = (char *)malloc(32 * sizeof(char));
convert(Version, argv[4]);
Key = argv[5];
} else {
Version = "CH\x11V7.10-0313";
Key = "Oly5D62FaE94W7";
}
}
UserName = argv[1];
Password = argv[2];
/* 调用子函数完成802.1X认证 */
Authentication(UserName, Password, DeviceName, Version, Key);
return (0);
}
void convert(char *dest, char const *src)
{
int i = 0, j = 0;
int len = strlen(src);
while (i < len) {
if (src[i] == '\\' && i+3 < len && src[i+1] == 'x') {
char s[3];
s[0] = src[i+2];
s[1] = src[i+3];
s[2] = 0;
char c;
sscanf(s, "%x", &c);
dest[j++] = c;
i += 4;
} else {
dest[j++] = src[i++];
}
}
dest[j] = 0;
}