Board logo

标题: [特效代码] 批处理根据无线路由器MAC计算相应PIN码 [打印本页]

作者: xzwcn    时间: 2012-5-9 21:52     标题: 批处理根据无线路由器MAC计算相应PIN码

本帖最后由 pcl_test 于 2016-9-2 20:59 编辑
  1. //Computes PIN code starts with OUI "C83A35" and "00B00C"
  2. //Both two OUIs which belonged to Tenda Technology Co., Ltd are confirmed effectively.
  3. //Coded by Zhaochunsheng - iBeini.com
  4. //Modified by Lingxi - WiFiBETA.COM
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. int main()
  8. {
  9.     unsigned int wps_pin_checksum(unsigned int pin);
  10.     int PIN = 0;
  11. //   printf("ComputePIN-C83A35\n");
  12.     printf("Description:\n");
  13.     printf("If your wireless router MAC address start with \"C83A35\" or \"00B00C\",\n");
  14.     printf("type the other six digits, you might be able to get the \n");
  15.     printf("WPS-PIN of this equipment, please have a try, good luck!\n\n");
  16.     printf("Code by ZhaoChunsheng 04/07/2012 http://iBeini.com\n\n");
  17.     printf("Modified by Lingxi - WiFiBETA.COM\n\n");
  18. //Translated to Chinese
  19. printf("说明:\n");
  20. printf("如果您的无线路由器MAC地址以“C83A35”或“00B00C”打头,\n");
  21. printf("输入后六位MAC地址(不分大小写)您或许可以获得该路由的WPS PIN密钥!\n");
  22. printf("祝你好运!\n\n");
  23. printf("由赵春生编写于2012年4月7日  Http://iBeini.com\n");
  24. printf("由灵曦修改并汉化  WiFiBETA.COM\n\n");
  25.     printf("请输入后六位MAC地址(HEX):\n");
  26.     printf("Input the last 6 digits of MAC Address(HEX):");
  27.     scanf("%x",&PIN);
  28.     printf("您输入的后六位MAC地址是 %X\n",PIN);
  29.     printf("Last 6 digits of MAC Address(HEX) are: %X\n",PIN);
  30.     printf("WPS PIN is: %07d%d\n",PIN%10000000,wps_pin_checksum(PIN%10000000));
  31.     return 0;
  32. }
  33. unsigned int wps_pin_checksum(unsigned int pin)
  34. {
  35. unsigned int accum = 0;
  36. while (pin)
  37. {
  38. accum += 3 * (pin % 10);
  39. pin /= 10;
  40. accum += pin % 10;
  41. pin /= 10;
  42. }
  43.     return (10 - accum % 10) % 10;
  44. }
复制代码
更新
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
  1. @echo off & setlocal enabledelayedexpansion
  2. echo,请输入后六位 MAC 地址 (HEX^):
  3. set /p "PIN=Input the last 6 digits of MAC Address(HEX): "
  4. echo,您输入的后六位 MAC 地址是 !PIN!
  5. echo,Last 6 digits of MAC Address(HEX^) are: !PIN!
  6. set "accum=0"
  7. set /a "pinO=0x!pin! + 10000000, pin=0x!pin! %% 10000000"
  8. :wps_pin_checksum
  9. if !pin! neq 0 (
  10.   set /a "accum += 3 * (pin %% 10), pin /= 10, accum += pin %% 10, pin /= 10"
  11.   goto :wps_pin_checksum
  12. )
  13. set /a "wps_pin_checksum=(10 - accum %% 10) %% 10"
  14. echo,WPS PIN is: !pinO:~-7!!wps_pin_checksum!
  15. 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
  1. @echo off & setlocal enabledelayedexpansion
  2. :input
  3. echo,请输入后六位 MAC 地址 (HEX^):
  4. set /p "PIN=Input the last 6 digits of MAC Address(HEX): "
  5. set "PIN=!PIN: =!"
  6. if "!PIN:~6!" neq "" (echo,输入超过 6 位) & goto :input
  7. echo,您输入的后六位 MAC 地址是 !PIN!
  8. echo,Last 6 digits of MAC Address(HEX^) are: !PIN!
  9. set "accum=0"
  10. set /a "pinO=0x!pin! + 10000000, pin=0x!pin! %% 10000000"
  11. :wps_pin_checksum
  12. if !pin! neq 0 (
  13.   set /a "accum += 3 * (pin %% 10), pin /= 10, accum += pin %% 10, pin /= 10"
  14.   goto :wps_pin_checksum
  15. )
  16. set /a "wps_pin_checksum=(10 - accum %% 10) %% 10"
  17. echo,WPS PIN is: !pinO:~-7!!wps_pin_checksum!
  18. set "comd="
  19. set /p "comd=按 X 键再回车退出, 否则继续查询: "
  20. 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 的计算有点兴趣, 算法并不复杂, 楼主在论坛里稍许学习, 自己做出来不难.
  1. @echo off & setlocal enabledelayedexpansion
  2. :input
  3. set /p "MACS=请输入后六位 MAC 地址(多组用半角空格或半角逗号分隔): "
  4. echo, #     MAC       WPS_PIN
  5. set "i=100"
  6. for %%M in (!MACS!) do (
  7. set /a "i+=1"
  8. set "MAC=%%M"
  9. if "!MAC:~6!" neq "" (echo,第 !i:~-2! 个超过 6 位) & goto :input
  10. call :WPS_PIN WPS_PIN !MAC!
  11. echo,!i:~-2!  !MAC! !WPS_PIN!
  12. )
  13. set "comd="
  14. set /p "comd=按 X 键再回车退出, 否则继续查询: "
  15. if /i "%comd%"=="x" (exit) else goto :input
  16. exit
  17. :WPS_PIN WPS_PIN pin pinO acc
  18. setlocal
  19. if "%3"=="" set /a "pinO=0x%2 + 10000000, pin=0x%2 %% 10000000"
  20. if "%3"=="" endlocal & (call :WPS_PIN %1 %pin% %pinO:~-7% 0) & exit /b
  21. if %2 equ 0 set /a "checksum=(10 - %4 %% 10) %% 10"
  22. if %2 equ 0 endlocal & set "%1=%3%checksum%" & exit /b
  23. set/a"pin=%2,acc=%4,acc+=3*(pin %% 10),pin/=10,acc+=pin %% 10,pin/=10"
  24. endlocal & (call :WPS_PIN %1 %pin% %3 %acc%) & exit /b
  25. exit /b
复制代码

作者: xzwcn    时间: 2012-5-12 10:35

回复 11# neorobin


    辛苦了!如果再增加“4.在当前文件夹把结果生成名为PIN.TXT的文件;”该如何补充呢?




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2