-
malaohu 说:
@ChatGPT
centos 7 实时查看某个端口网络流量情况你可以使用以下命令来实时查看某个端口的网络流量情况:
sudo tcpdump -i any port {端口号} -nnvvS
这将使用tcpdump工具在任何接口("-i any")上监听特定端口("port {端口号}")的数据包,并显示每个数据包的详细信息。
你也可以使用以下命令查看指定端口的网络连接数,其中"{端口号}"为要检查的端口号。
netstat -an | grep "{端口号}" | grep ESTABLISHED | wc -l
这将过滤出与指定端口建立的连接并显示其数量。
-
malaohu 说:
@ChatGPT
centos 7 实时查看某个端口网络流量情况,公网IP您可以使用以下命令来检查特定端口上的网络流量情况,包括公网IP地址:
sudo tcpdump -i eth0 port YOUR_PORT_NUMBER
其中,-i参数指定要监视的网络接口(这里指定为eth0),YOUR_PORT_NUMBER为您要监视的端口号。
执行以上命令后,将在终端上看到实时的网络流量情况,包括源IP地址和目标IP地址。此时需要传输一些数据到该特定端口,才能看到相关流量信息。
如果您想更好的分析流量情况可以考虑使用Wireshark,它可以以图形界面的形式显示更详细的网络流量信息,包括每个数据包的信息和统计信息等。
-
malaohu 说:
@ChatGPT
NSQ 如何查看 发布Topic客户端IP要查看发布NSQ Topic的客户端IP地址,可以使用NSQ的日志记录功能。
可以在NSQ节点的日志文件中查找来自客户端的发布请求。当客户端发布消息时,其IP地址将记录在日志文件中。
可以使用以下命令来查看NSQ节点的日志文件:
tail -f /path/to/nsqd.log
查看日志后,可以搜索字符串“PRODUCER client_id”的记录。在这个记录中,将显示该客户端的IP地址,以及该客户端发布的消息的内容和其他相关信息。
需要注意的是,NSQ的日志中可能包含大量信息。因此,需要使用适当的搜索策略来快速找到所需的信息。
-
ChatGPT 说:
malaohu 说:
@ChatGPT
NSQ 如何查看 发布Topic客户端IP要查看发布NSQ Topic的客户端IP地址,可以使用NSQ的日志记录功能。
可以在NSQ节点的日志文件中查找来自客户端的发布请求。当客户端发布消息时,其IP地址将记录在日志文件中。
可以使用以下命令来查看NSQ节点的日志文件:
tail -f /path/to/nsqd.log
查看日志后,可以搜索字符串“PRODUCER client_id”的记录。在这个记录中,将显示该客户端的IP地址,以及该客户端发布的消息的内容和其他相关信息。
需要注意的是,NSQ的日志中可能包含大量信息。因此,需要使用适当的搜索策略来快速找到所需的信息。
@ChatGPT 我的NSQ是Docker部署的,该怎么操作?
-
malaohu 说:
ChatGPT 说:
malaohu 说:
@ChatGPT
NSQ 如何查看 发布Topic客户端IP要查看发布NSQ Topic的客户端IP地址,可以使用NSQ的日志记录功能。
可以在NSQ节点的日志文件中查找来自客户端的发布请求。当客户端发布消息时,其IP地址将记录在日志文件中。
可以使用以下命令来查看NSQ节点的日志文件:
tail -f /path/to/nsqd.log
查看日志后,可以搜索字符串“PRODUCER client_id”的记录。在这个记录中,将显示该客户端的IP地址,以及该客户端发布的消息的内容和其他相关信息。
需要注意的是,NSQ的日志中可能包含大量信息。因此,需要使用适当的搜索策略来快速找到所需的信息。
@ChatGPT 我的NSQ是Docker部署的,该怎么操作?
如果您的NSQ是通过Docker部署的,您可以通过以下步骤来查找发布NSQ Topic的客户端IP地址。
- 查找NSQ节点的容器名称或ID。
运行以下命令可以查找所有正在运行的NSQ节点的容器名称或ID:
docker ps | grep nsq
- 进入NSQ节点的容器。
使用以下命令进入正在运行的容器:
docker exec -it /bin/bash
替换``为要进入的容器的名称或ID。
- 查看NSQ节点的日志文件。
使用以下命令查看NSQ节点容器中的日志文件:
tail -f /nsqd.log
如果日志文件不在此位置,您需要找到正确的日志文件路径并将命令中的路径替换为正确的路径。
- 搜索关键字。
使用
grep
命令来搜索NSQ日志文件。例如,以下命令可以搜索包含“PRODUCER client_id”的记录:grep "PRODUCER client_id" /nsqd.log
该命令将返回所有包含该关键字的记录,其中将包括客户端IP地址以及发布的消息的内容和其他相关信息。
重新调整以快速找到所需的信息。
注意:如果为了安全性或其他原因,NSQ节点可能没有开放容器端口到外面,这时候需要连接到容器所在的主机并进入容器内部。如果您无法进入容器,您可以通过检查客户端程序的代码或添加更多日志以捕获所需的信息。
-
malaohu 说:
@ChatGPT 阿里云云服务器,CentOS系统内看不到公网网卡。那怎么查看外网访问我的服务的公网IP?
在阿里云云服务器内部查看到的只是它的内网IP地址,若需要查看公网IP地址,可以尝试以下方法:
-
执行
curl ifconfig.me
命令,会返回服务器的公网IP地址。 -
登录阿里云控制台,在云服务器实例详情页中,可以看到公网IP地址。
-
在命令行下执行
ip addr
命令可以查看系统的所有网络接口信息,其中包括公网接口的IP地址。 -
在阿里云控制台内,通过云监控服务查看服务器的公网IP地址。
以上方法其中一个就可以获取到你服务器的公网IP地址了。
-
-
malaohu 说:
@ChatGPT CentOS7 查看所以连接的IP
你可以使用
ss
命令来查看当前所有连接的 IP。以下是如何使用
ss
命令:-
打开终端,使用 root 用户或者 sudo 身份登录。
-
执行
ss
命令来查看所有连接的 IP 地址:ss -tuan
该命令将会显示所有当前 TCP 和 UDP 连接的详细信息。
你也可以使用
grep
命令来过滤结果来仅显示 IP 地址:ss -tuan | grep -E "\.*\" | awk '{print $5}' | cut -d':' -f1
该命令将会仅显示当前所有 TCP 和 UDP 连接的 IP 地址列表。
值得注意的是,你需要以 root 或者 sudo 身份运行该命令才能够查看所有连接的 IP。
-
-
malaohu 说:
netstat -ntu | grep tcp | awk '{print $5}'
展示IP去重
可以将命令修改为:
netstat -ntu | grep tcp | awk '{print $5}' | cut -d: -f1 | sort | uniq
这条命令的作用是:
- 通过
netstat -ntu
命令获取所有 TCP 连接的信息; - 使用
grep tcp
过滤出 TCP 连接; - 使用
awk '{print $5}'
提取出每条连接的远程 IP 和端口; - 使用
cut -d: -f1
命令将每条连接的 IP 与端口分离,只保留 IP; - 使用
sort
命令按照 IP 排序; - 使用
uniq
命令删除重复的 IP。
这样修改后,就可以展示去重后的 IP 列表了。
- 通过
-
Joe 说:
@ChatGPT 使用js写一个三级联动的效果
以下是一个简单的使用JavaScript实现三级联动效果的示例代码:
HTML代码:
JavaScript代码:
// 省市区联动数据 const data = { '北京市': { '市辖区': ['东城区', '西城区', '朝阳区', '丰台区', '石景山区', '海淀区', '门头沟区', '房山区', '通州区', '顺义区', '昌平区', '大兴区', '怀柔区', '平谷区', '密云区', '延庆区'] }, '天津市': { '市辖区': ['和平区', '河东区', '河西区', '南开区', '河北区', '红桥区', '东丽区', '西青区', '津南区', '北辰区', '武清区', '宝坻区', '滨海新区', '宁河区', '静海区', '蓟州区'] }, '河北省': { '石家庄市': ['长安区', '桥西区', '新华区', '井陉矿区', '裕华区', '藁城区', '鹿泉区', '栾城区', '井陉县', '正定县', '行唐县', '灵寿县', '高邑县', '深泽县', '赞皇县', '无极县', '平山县', '元氏县', '赵县', '辛集市', '晋州市', '新乐市'], '唐山市': ['路南区', '路北区', '古冶区', '开平区', '丰南区', '丰润区', '曹妃甸区', '滦县', '滦南县', '乐亭县', '迁西县', '玉田县', '遵化市', '迁安市'], '秦皇岛市': ['海港区', '山海关区', '北戴河区', '抚宁区', '青龙满族自治县', '昌黎县', '卢龙县'], // 其他市区数据... }, // 其他省份数据... }; // 初始化省份数据 for (let province in data) { let option = document.createElement('option'); option.value = province; option.innerHTML = province; document.getElementById('province').appendChild(option); } // 省份改变时更新市区数据 document.getElementById('province').addEventListener('change', () => { let province = document.getElementById('province').value; let city_select = document.getElementById('city'); let district_select = document.getElementById('district'); city_select.innerHTML = '请选择市'; district_select.innerHTML = '请选择区/县'; for (let city in data[province]) { let option = document.createElement('option'); option.value = city; option.innerHTML = city; city_select.appendChild(option); } }); // 市改变时更新区县数据 document.getElementById('city').addEventListener('change', () => { let province = document.getElementById('province').value; let city = document.getElementById('city').value; let district_select = document.getElementById('district'); district_select.innerHTML = '请选择区/县'; for (let district of data[province][city]) { let option = document.createElement('option'); option.value = district; option.innerHTML = district; district_select.appendChild(option); } });
这段代码实现了三级联动的效果,基本思路是初始化省份数据,当省份改变时更新市区数据,当市改变时更新区县数据。因为数据较多,所以采用了对象来存储,其中省份数据为对象的属性,每个市区及县数据为对象的值。
-
// KeyGen-editplus.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <windows.h> #include <time.h> char ReChar(char ch); char DeCodeChar(char ch); void GetDReg05Code(char* pUserName, int ulen); unsigned short* CreateTable(); void RandonRegCode(char* pRegCode, int rLen, char* pAsc, int aLen); char* FomartStr(char* str, WORD sNum); WORD SearchTable(int nNum, char* pCUserName, int len); int SprintfChars(char* pUserName, int len, char* pCUserName, int nNum); char ch5 = {}; unsigned short* pTable = {}; int _tmain(int argc, _TCHAR* argv[]) { srand((unsigned)time(NULL)); char AscArry[36] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A }; char RegCode[29] = {}; char DRegCode[29] = {}; char UserName[10] = {}; RandonRegCode(RegCode, 29, AscArry, 36); printf("input Name:"); scanf_s("%s", UserName, 10); int ulen = strlen(UserName); int rlen = _countof(RegCode); pTable = CreateTable(); char* pAscii = (char*)malloc(sizeof(char) * 3000); int slen = SprintfChars(UserName, ulen, pAscii, 3000); WORD sNum = SearchTable(0, pAscii, slen); char* pCNum = (char*)malloc(sizeof(char) * 10); FomartStr(pCNum, sNum); GetDReg05Code(UserName, ulen); RegCode[2] = ReChar(pCNum[0]); RegCode[3] = ReChar(pCNum[1]); RegCode[4] = ReChar(ch5); for (int i = 0; i < 29; i++) { if ((i + 1) % 6) { char ret = DeCodeChar(RegCode[i]); ret >>= 1; if (ret >= 10) DRegCode[i] = ret + 55; else DRegCode[i] = ret + 48; } else DRegCode[i] = 0x2D; } slen = SprintfChars(DRegCode + 2, rlen - 2, pAscii, 3000); sNum = SearchTable(0, pAscii, slen); FomartStr(pCNum, sNum); RegCode[0] = ReChar(pCNum[0]); RegCode[1] = ReChar(pCNum[1]); printf("RegCode:"); for (int i = 0; i < 29; i++) { printf("%C", RegCode[i]); } system("pause"); return 0; } int SprintfChars(char* pUserName, int len, char* pCUserName, int nNum) { int ret; int i = 0; int j = 0; if (len <= 0) { pCUserName = NULL; ret = 0; } else { while (j < len) { sprintf_s(&pCUserName[i], nNum - i, "%04X", pUserName[j++]); i += 4; } pCUserName[i] = 0; ret = i; } return ret; } WORD SearchTable(int nNum, char* pCUserName, int len) { WORD ret; int index; char* p = pCUserName; if (len <= 0) { ret = nNum; } else { ret = nNum; while (p < pCUserName + len) { index = *p++^LOBYTE(ret); ret = pTable[index] ^ (ret >> 8); } } return ret; } char* FomartStr(char* str, WORD sNum) { sprintf_s(str, 10, "%04X", sNum); return str; } unsigned short* CreateTable() { unsigned short * pTable = (unsigned short *)malloc(0x200); memset(pTable, 0, 0x200); for (int i = 0; i < 0x100; i++) { int j = 1; unsigned short eax = 0xC0C1; while (j < 0x100) { //test edx,ecx; if (i&j) pTable[i] ^= eax; eax += eax; eax ^= 0x4003; j += j; } } return pTable; } char ReChar(char ch) { char arr[] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A }; int len = _countof(arr); for (int i = 0; i < len; i++) { char tmp; char ret = DeCodeChar(arr[i]); ret >>= 1; if (ret >= 10) tmp = ret + 55; else tmp = ret + 48; if (tmp == ch) { return arr[i]; } } } char DeCodeChar(char ch) { //except:I/O char chArry[] = { 50, 51, 52, 53,// 2,3,4,5, 54, 55, 56, 57,// 6,7,8,9, 65, 66, 67, 68,// A,B,C,D, 69, 70, 71, 72,// E,F,G,H, 74, 75, 76, 77,// J,K,L,M, 78, 80, 81, 82,// N,P,Q,R, 83, 84, 85, 86,// S,T,U,V, 87, 88, 89, 90 // W,X,Y,Z }; char ret = 0; int v1 = 2; char* p = &chArry[1]; while (v1 - 2 < 32) { if (ch == *(p - 1)) ret = v1 - 2; if (ch == *(p)) ret = v1 - 1; if (ch == *(p + 1)) ret = v1; if (ch == *(p + 2)) ret = v1 + 1; p += 4; v1 += 4; } return ret; } void GetDReg05Code(char* pUserName, int ulen) { int nNum01 = 0; int nNum02 = 0; int nNum03 = 1; int i = 0; while (i < ulen - 1) { nNum01 += pUserName[i]; nNum02 += pUserName[i + 1]; i += 2; } if (i < ulen) nNum03 = pUserName[i] + 1; sprintf_s(&ch5, 2, "%01X", ((9 * (nNum01 + nNum02 + nNum03) + 0xA) / 3 + 36) % 16); } void RandonRegCode(char* pRegCode, int rLen, char* pAsc, int aLen) { for (int i = 0; i < rLen; i++) { if ((i + 1) % 6 == 0) pRegCode[i] = 0x2D; else pRegCode[i] = pAsc[rand() % aLen]; } }
@ChatGPT 以上代码请用javascript 实现一下
-
malaohu 说:
// KeyGen-editplus.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include char ReChar(char ch); char DeCodeChar(char ch); void GetDReg05Code(char* pUserName, int ulen); unsigned short* CreateTable(); void RandonRegCode(char* pRegCode, int rLen, char* pAsc, int aLen); char* FomartStr(char* str, WORD sNum); WORD SearchTable(int nNum, char* pCUserName, int len); int SprintfChars(char* pUserName, int len, char* pCUserName, int nNum); char ch5 = {}; unsigned short* pTable = {}; int _tmain(int argc, _TCHAR* argv[]) { srand((unsigned)time(NULL)); char AscArry[36] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A }; char RegCode[29] = {}; char DRegCode[29] = {}; char UserName[10] = {}; RandonRegCode(RegCode, 29, AscArry, 36); printf("input Name:"); scanf_s("%s", UserName, 10); int ulen = strlen(UserName); int rlen = _countof(RegCode); pTable = CreateTable(); char* pAscii = (char*)malloc(sizeof(char) * 3000); int slen = SprintfChars(UserName, ulen, pAscii, 3000); WORD sNum = SearchTable(0, pAscii, slen); char* pCNum = (char*)malloc(sizeof(char) * 10); FomartStr(pCNum, sNum); GetDReg05Code(UserName, ulen); RegCode[2] = ReChar(pCNum[0]); RegCode[3] = ReChar(pCNum[1]); RegCode[4] = ReChar(ch5); for (int i = 0; i { if ((i + 1) % 6) { char ret = DeCodeChar(RegCode[i]); ret >>= 1; if (ret >= 10) DRegCode[i] = ret + 55; else DRegCode[i] = ret + 48; } else DRegCode[i] = 0x2D; } slen = SprintfChars(DRegCode + 2, rlen - 2, pAscii, 3000); sNum = SearchTable(0, pAscii, slen); FomartStr(pCNum, sNum); RegCode[0] = ReChar(pCNum[0]); RegCode[1] = ReChar(pCNum[1]); printf("RegCode:"); for (int i = 0; i { printf("%C", RegCode[i]); } system("pause"); return 0; } int SprintfChars(char* pUserName, int len, char* pCUserName, int nNum) { int ret; int i = 0; int j = 0; if (len { pCUserName = NULL; ret = 0; } else { while (j { sprintf_s(&pCUserName[i], nNum - i, "%04X", pUserName[j++]); i += 4; } pCUserName[i] = 0; ret = i; } return ret; } WORD SearchTable(int nNum, char* pCUserName, int len) { WORD ret; int index; char* p = pCUserName; if (len { ret = nNum; } else { ret = nNum; while (p { index = *p++^LOBYTE(ret); ret = pTable[index] ^ (ret >> 8); } } return ret; } char* FomartStr(char* str, WORD sNum) { sprintf_s(str, 10, "%04X", sNum); return str; } unsigned short* CreateTable() { unsigned short * pTable = (unsigned short *)malloc(0x200); memset(pTable, 0, 0x200); for (int i = 0; i { int j = 1; unsigned short eax = 0xC0C1; while (j { //test edx,ecx; if (i&j) pTable[i] ^= eax; eax += eax; eax ^= 0x4003; j += j; } } return pTable; } char ReChar(char ch) { char arr[] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A }; int len = _countof(arr); for (int i = 0; i { char tmp; char ret = DeCodeChar(arr[i]); ret >>= 1; if (ret >= 10) tmp = ret + 55; else tmp = ret + 48; if (tmp == ch) { return arr[i]; } } } char DeCodeChar(char ch) { //except:I/O char chArry[] = { 50, 51, 52, 53,// 2,3,4,5, 54, 55, 56, 57,// 6,7,8,9, 65, 66, 67, 68,// A,B,C,D, 69, 70, 71, 72,// E,F,G,H, 74, 75, 76, 77,// J,K,L,M, 78, 80, 81, 82,// N,P,Q,R, 83, 84, 85, 86,// S,T,U,V, 87, 88, 89, 90 // W,X,Y,Z }; char ret = 0; int v1 = 2; char* p = &chArry[1]; while (v1 - 2 { if (ch == *(p - 1)) ret = v1 - 2; if (ch == *(p)) ret = v1 - 1; if (ch == *(p + 1)) ret = v1; if (ch == *(p + 2)) ret = v1 + 1; p += 4; v1 += 4; } return ret; } void GetDReg05Code(char* pUserName, int ulen) { int nNum01 = 0; int nNum02 = 0; int nNum03 = 1; int i = 0; while (i { nNum01 += pUserName[i]; nNum02 += pUserName[i + 1]; i += 2; } if (i nNum03 = pUserName[i] + 1; sprintf_s(&ch5, 2, "%01X", ((9 * (nNum01 + nNum02 + nNum03) + 0xA) / 3 + 36) % 16); } void RandonRegCode(char* pRegCode, int rLen, char* pAsc, int aLen) { for (int i = 0; i { if ((i + 1) % 6 == 0) pRegCode[i] = 0x2D; else pRegCode[i] = pAsc[rand() % aLen]; } }
@ChatGPT 以上代码请用javascript 实现一下
哎呀, OpenAI接口可能出问题了,请稍后再试!我这就PM站长~ @malaohu
-
malaohu 说:
// KeyGen-editplus.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <windows.h> #include <time.h> char ReChar(char ch); char DeCodeChar(char ch); void GetDReg05Code(char* pUserName, int ulen); unsigned short* CreateTable(); void RandonRegCode(char* pRegCode, int rLen, char* pAsc, int aLen); char* FomartStr(char* str, WORD sNum); WORD SearchTable(int nNum, char* pCUserName, int len); int SprintfChars(char* pUserName, int len, char* pCUserName, int nNum); char ch5 = {}; unsigned short* pTable = {}; int _tmain(int argc, _TCHAR* argv[]) { srand((unsigned)time(NULL)); char AscArry[36] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A }; char RegCode[29] = {}; char DRegCode[29] = {}; char UserName[10] = {}; RandonRegCode(RegCode, 29, AscArry, 36); printf("input Name:"); scanf_s("%s", UserName, 10); int ulen = strlen(UserName); int rlen = _countof(RegCode); pTable = CreateTable(); char* pAscii = (char*)malloc(sizeof(char) * 3000); int slen = SprintfChars(UserName, ulen, pAscii, 3000); WORD sNum = SearchTable(0, pAscii, slen); char* pCNum = (char*)malloc(sizeof(char) * 10); FomartStr(pCNum, sNum); GetDReg05Code(UserName, ulen); RegCode[2] = ReChar(pCNum[0]); RegCode[3] = ReChar(pCNum[1]); RegCode[4] = ReChar(ch5); for (int i = 0; i < 29; i++) { if ((i + 1) % 6) { char ret = DeCodeChar(RegCode[i]); ret >>= 1; if (ret >= 10) DRegCode[i] = ret + 55; else DRegCode[i] = ret + 48; } else DRegCode[i] = 0x2D; } slen = SprintfChars(DRegCode + 2, rlen - 2, pAscii, 3000); sNum = SearchTable(0, pAscii, slen); FomartStr(pCNum, sNum); RegCode[0] = ReChar(pCNum[0]); RegCode[1] = ReChar(pCNum[1]); printf("RegCode:"); for (int i = 0; i < 29; i++) { printf("%C", RegCode[i]); } system("pause"); return 0; } int SprintfChars(char* pUserName, int len, char* pCUserName, int nNum) { int ret; int i = 0; int j = 0; if (len <= 0) { pCUserName = NULL; ret = 0; } else { while (j < len) { sprintf_s(&pCUserName[i], nNum - i, "%04X", pUserName[j++]); i += 4; } pCUserName[i] = 0; ret = i; } return ret; } WORD SearchTable(int nNum, char* pCUserName, int len) { WORD ret; int index; char* p = pCUserName; if (len <= 0) { ret = nNum; } else { ret = nNum; while (p < pCUserName + len) { index = *p++^LOBYTE(ret); ret = pTable[index] ^ (ret >> 8); } } return ret; } char* FomartStr(char* str, WORD sNum) { sprintf_s(str, 10, "%04X", sNum); return str; } unsigned short* CreateTable() { unsigned short * pTable = (unsigned short *)malloc(0x200); memset(pTable, 0, 0x200); for (int i = 0; i < 0x100; i++) { int j = 1; unsigned short eax = 0xC0C1; while (j < 0x100) { //test edx,ecx; if (i&j) pTable[i] ^= eax; eax += eax; eax ^= 0x4003; j += j; } } return pTable; } char ReChar(char ch) { char arr[] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A }; int len = _countof(arr); for (int i = 0; i < len; i++) { char tmp; char ret = DeCodeChar(arr[i]); ret >>= 1; if (ret >= 10) tmp = ret + 55; else tmp = ret + 48; if (tmp == ch) { return arr[i]; } } } char DeCodeChar(char ch) { //except:I/O char chArry[] = { 50, 51, 52, 53,// 2,3,4,5, 54, 55, 56, 57,// 6,7,8,9, 65, 66, 67, 68,// A,B,C,D, 69, 70, 71, 72,// E,F,G,H, 74, 75, 76, 77,// J,K,L,M, 78, 80, 81, 82,// N,P,Q,R, 83, 84, 85, 86,// S,T,U,V, 87, 88, 89, 90 // W,X,Y,Z }; char ret = 0; int v1 = 2; char* p = &chArry[1]; while (v1 - 2 < 32) { if (ch == *(p - 1)) ret = v1 - 2; if (ch == *(p)) ret = v1 - 1; if (ch == *(p + 1)) ret = v1; if (ch == *(p + 2)) ret = v1 + 1; p += 4; v1 += 4; } return ret; } void GetDReg05Code(char* pUserName, int ulen) { int nNum01 = 0; int nNum02 = 0; int nNum03 = 1; int i = 0; while (i < ulen - 1) { nNum01 += pUserName[i]; nNum02 += pUserName[i + 1]; i += 2; } if (i < ulen) nNum03 = pUserName[i] + 1; sprintf_s(&ch5, 2, "%01X", ((9 * (nNum01 + nNum02 + nNum03) + 0xA) / 3 + 36) % 16); } void RandonRegCode(char* pRegCode, int rLen, char* pAsc, int aLen) { for (int i = 0; i < rLen; i++) { if ((i + 1) % 6 == 0) pRegCode[i] = 0x2D; else pRegCode[i] = pAsc[rand() % aLen]; } }
@ChatGPT 以上代码请用javascript 实现一下
-
malaohu 说:
malaohu 说:
// KeyGen-editplus.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include char ReChar(char ch); char DeCodeChar(char ch); void GetDReg05Code(char* pUserName, int ulen); unsigned short* CreateTable(); void RandonRegCode(char* pRegCode, int rLen, char* pAsc, int aLen); char* FomartStr(char* str, WORD sNum); WORD SearchTable(int nNum, char* pCUserName, int len); int SprintfChars(char* pUserName, int len, char* pCUserName, int nNum); char ch5 = {}; unsigned short* pTable = {}; int _tmain(int argc, _TCHAR* argv[]) { srand((unsigned)time(NULL)); char AscArry[36] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A }; char RegCode[29] = {}; char DRegCode[29] = {}; char UserName[10] = {}; RandonRegCode(RegCode, 29, AscArry, 36); printf("input Name:"); scanf_s("%s", UserName, 10); int ulen = strlen(UserName); int rlen = _countof(RegCode); pTable = CreateTable(); char* pAscii = (char*)malloc(sizeof(char) * 3000); int slen = SprintfChars(UserName, ulen, pAscii, 3000); WORD sNum = SearchTable(0, pAscii, slen); char* pCNum = (char*)malloc(sizeof(char) * 10); FomartStr(pCNum, sNum); GetDReg05Code(UserName, ulen); RegCode[2] = ReChar(pCNum[0]); RegCode[3] = ReChar(pCNum[1]); RegCode[4] = ReChar(ch5); for (int i = 0; i > { if ((i + 1) % 6) { char ret = DeCodeChar(RegCode[i]); ret >>= 1; if (ret >= 10) DRegCode[i] = ret + 55; else DRegCode[i] = ret + 48; } else DRegCode[i] = 0x2D; } slen = SprintfChars(DRegCode + 2, rlen - 2, pAscii, 3000); sNum = SearchTable(0, pAscii, slen); FomartStr(pCNum, sNum); RegCode[0] = ReChar(pCNum[0]); RegCode[1] = ReChar(pCNum[1]); printf("RegCode:"); for (int i = 0; i > { printf("%C", RegCode[i]); } system("pause"); return 0; } int SprintfChars(char* pUserName, int len, char* pCUserName, int nNum) { int ret; int i = 0; int j = 0; if (len > { pCUserName = NULL; ret = 0; } else { while (j > { sprintf_s(&pCUserName[i], nNum - i, "%04X", pUserName[j++]); i += 4; } pCUserName[i] = 0; ret = i; } return ret; } WORD SearchTable(int nNum, char* pCUserName, int len) { WORD ret; int index; char* p = pCUserName; if (len > { ret = nNum; } else { ret = nNum; while (p > { index = *p++^LOBYTE(ret); ret = pTable[index] ^ (ret >> 8); } } return ret; } char* FomartStr(char* str, WORD sNum) { sprintf_s(str, 10, "%04X", sNum); return str; } unsigned short* CreateTable() { unsigned short * pTable = (unsigned short *)malloc(0x200); memset(pTable, 0, 0x200); for (int i = 0; i > { int j = 1; unsigned short eax = 0xC0C1; while (j > { //test edx,ecx; if (i&j) pTable[i] ^= eax; eax += eax; eax ^= 0x4003; j += j; } } return pTable; } char ReChar(char ch) { char arr[] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A }; int len = _countof(arr); for (int i = 0; i > { char tmp; char ret = DeCodeChar(arr[i]); ret >>= 1; if (ret >= 10) tmp = ret + 55; else tmp = ret + 48; if (tmp == ch) { return arr[i]; } } } char DeCodeChar(char ch) { //except:I/O char chArry[] = { 50, 51, 52, 53,// 2,3,4,5, 54, 55, 56, 57,// 6,7,8,9, 65, 66, 67, 68,// A,B,C,D, 69, 70, 71, 72,// E,F,G,H, 74, 75, 76, 77,// J,K,L,M, 78, 80, 81, 82,// N,P,Q,R, 83, 84, 85, 86,// S,T,U,V, 87, 88, 89, 90 // W,X,Y,Z }; char ret = 0; int v1 = 2; char* p = &chArry[1]; while (v1 - 2 > { if (ch == *(p - 1)) ret = v1 - 2; if (ch == *(p)) ret = v1 - 1; if (ch == *(p + 1)) ret = v1; if (ch == *(p + 2)) ret = v1 + 1; p += 4; v1 += 4; } return ret; } void GetDReg05Code(char* pUserName, int ulen) { int nNum01 = 0; int nNum02 = 0; int nNum03 = 1; int i = 0; while (i > { nNum01 += pUserName[i]; nNum02 += pUserName[i + 1]; i += 2; } if (i > nNum03 = pUserName[i] + 1; sprintf_s(&ch5, 2, "%01X", ((9 * (nNum01 + nNum02 + nNum03) + 0xA) / 3 + 36) % 16); } void RandonRegCode(char* pRegCode, int rLen, char* pAsc, int aLen) { for (int i = 0; i > { if ((i + 1) % 6 == 0) pRegCode[i] = 0x2D; else pRegCode[i] = pAsc[rand() % aLen]; } }
@ChatGPT 以上代码请用javascript 实现一下
哎呀, OpenAI接口可能出问题了,请稍后再试!我这就PM站长~ @malaohu