From 52d630e7fc8f34e58fcd6ca77b41089d2bea97e8 Mon Sep 17 00:00:00 2001 From: CN_SZTL Date: Wed, 22 Jan 2020 09:54:13 +0800 Subject: [PATCH] njitclient: bump to latest git HEAD --- package/jsda/njitclient/.Makefile.swm | Bin 12288 -> 0 bytes package/jsda/njitclient/.Makefile.swn | Bin 12288 -> 0 bytes package/jsda/njitclient/.Makefile.swo | Bin 12288 -> 0 bytes package/jsda/njitclient/Install.html | 0 .../License/gpl-3.0-standalone.html | 0 package/jsda/njitclient/Makefile.am | 0 package/jsda/njitclient/ReadMe.html | 0 package/jsda/njitclient/configure.ac | 0 .../jsda/njitclient/documents/Documents.html | 0 .../jsda/njitclient/src-gui/gtkgui/AUTHORS | 0 .../jsda/njitclient/src-gui/gtkgui/COPYING | 0 .../jsda/njitclient/src-gui/gtkgui/ChangeLog | 0 .../jsda/njitclient/src-gui/gtkgui/HACKING | 0 .../njitclient/src-gui/gtkgui/Makefile.am | 0 package/jsda/njitclient/src-gui/gtkgui/NEWS | 0 .../njitclient/src-gui/gtkgui/configure.ac | 0 .../src-gui/gtkgui/tests/Makefile.am | 0 .../luci_controller_njit.lua | 0 .../{luci-app-njitclient => luci}/njit.lua | 0 .../{luci-app-njitclient => luci}/readme | 0 .../njitclient/src-gui/qt4gui/ReadMe.html | 0 .../jsda/njitclient/src-gui/qt4gui/qt4gui.pro | 0 package/jsda/njitclient/src/Makefile.am | 0 package/jsda/njitclient/src/RefreshIP.py | 0 package/jsda/njitclient/src/auth.c | 801 +++++++++--------- package/jsda/njitclient/src/configure.ac | 0 package/jsda/njitclient/src/main.c | 52 +- .../njitclient/src/md5-buildin/Makefile.am | 0 .../njitclient/src/md5-buildin/configure.ac | 0 .../njitclient/src/md5-buildin/md5_dgst.c | 2 +- package/jsda/njitclient/src/tests/ifchk.mk | 0 package/jsda/njitclient/src/tests/md5test.mk | 0 package/jsda/njitclient/说明.txt | 1 - 33 files changed, 391 insertions(+), 465 deletions(-) delete mode 100644 package/jsda/njitclient/.Makefile.swm delete mode 100644 package/jsda/njitclient/.Makefile.swn delete mode 100644 package/jsda/njitclient/.Makefile.swo mode change 100755 => 100644 package/jsda/njitclient/Install.html mode change 100755 => 100644 package/jsda/njitclient/License/gpl-3.0-standalone.html mode change 100755 => 100644 package/jsda/njitclient/Makefile.am mode change 100755 => 100644 package/jsda/njitclient/ReadMe.html mode change 100755 => 100644 package/jsda/njitclient/configure.ac mode change 100755 => 100644 package/jsda/njitclient/documents/Documents.html mode change 100755 => 100644 package/jsda/njitclient/src-gui/gtkgui/AUTHORS mode change 100755 => 100644 package/jsda/njitclient/src-gui/gtkgui/COPYING mode change 100755 => 100644 package/jsda/njitclient/src-gui/gtkgui/ChangeLog mode change 100755 => 100644 package/jsda/njitclient/src-gui/gtkgui/HACKING mode change 100755 => 100644 package/jsda/njitclient/src-gui/gtkgui/Makefile.am mode change 100755 => 100644 package/jsda/njitclient/src-gui/gtkgui/NEWS mode change 100755 => 100644 package/jsda/njitclient/src-gui/gtkgui/configure.ac mode change 100755 => 100644 package/jsda/njitclient/src-gui/gtkgui/tests/Makefile.am rename package/jsda/njitclient/src-gui/{luci-app-njitclient => luci}/luci_controller_njit.lua (100%) rename package/jsda/njitclient/src-gui/{luci-app-njitclient => luci}/njit.lua (100%) rename package/jsda/njitclient/src-gui/{luci-app-njitclient => luci}/readme (100%) mode change 100755 => 100644 mode change 100755 => 100644 package/jsda/njitclient/src-gui/qt4gui/ReadMe.html mode change 100755 => 100644 package/jsda/njitclient/src-gui/qt4gui/qt4gui.pro mode change 100755 => 100644 package/jsda/njitclient/src/Makefile.am mode change 100644 => 100755 package/jsda/njitclient/src/RefreshIP.py mode change 100755 => 100644 package/jsda/njitclient/src/configure.ac mode change 100755 => 100644 package/jsda/njitclient/src/md5-buildin/Makefile.am mode change 100755 => 100644 package/jsda/njitclient/src/md5-buildin/configure.ac mode change 100755 => 100644 package/jsda/njitclient/src/tests/ifchk.mk mode change 100755 => 100644 package/jsda/njitclient/src/tests/md5test.mk delete mode 100644 package/jsda/njitclient/说明.txt diff --git a/package/jsda/njitclient/.Makefile.swm b/package/jsda/njitclient/.Makefile.swm deleted file mode 100644 index 0207be1ffbc532f488a216232c4fbf3528c14a4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeHN&5t8T6|dzh8Au3P5E2JOWoM)vgU8<4MPW74NX*#Y!K}w){IS^p(x}`nk87vh z)vE3uuld*@aR^)x7eELBhbRR80JubifP%ykj)`(7r$tDJ11Em3s=IB^C?q*>0JWuG zX59ViRlVQ)oNNuR-Dw{3o0V$}pN}y1+V5WcN~>|1-F@y7Gg`;=`0YMAl)=ozTW89| ziSW0k!kef-URd^k6jpsXlGRXnr{YB7iwLU0Jr&=)c76N4=PMb+)kASA$I8E`;DW~D zLBT-5z&m0fiN{+vA0OPfzHL)|{mPU4qn8KoXlWr-Fi;oSM{`oj# z{{a37ybAmZ_$BZF7y&(?3w#M!173NIu^$3I0PX>OpaIl@8t^2*flmQ{`w(Nl0lozs z0#|`Yfq#9FvA+VZ0xtkR2Yv?p6zBk-1m0X@>}BBFz&C+!0AB~50v4!i{X1b6`41)c&P1OD`W#{K~O9(VjDonb{3N>7dFoK6`-Zh3Jaao1#2 z#^GYC*{Z?@_GI$D^pe=_DS0408AZa(xu>U75sYvYO}~e@hr)GYcxd#A5z`9DmjRB! z);2bq?OuPc)jHm9wo72DbNk?Uf6#2zkL%5DsTvv2UTxWO*IFR3U8)XMP+eY1lKC5! znwJuN;bM#mq8N6<3`c-A^AerY*=^q~-jEAYW1KDF+zR3ZWG7v);bWtxT*VRh5@T@n zhWpxcyl=ukWVR6Vd$mv`oBjHP^}L1Ca{IKW6Tnsa$yMRA4mmO7O)h1KVH@^laj zSVCH%?+BNNo;FxOPF{#wUe1J3Vu*9*Ys9iip^>35?syAohzz6QS(EA9F7aFwmKYhq zRJ%U}aq^r@P63xM=OzgP6`bIZ^l&15U(d8bn7h!Sla&!~j(1Qor05CfSVF|4ej$&q z>;QGWG-hWLiQ^;M_(acWL8grM%L0z~RNzTILl_1~lZikYXygDnu)G|Nwa!}vVIF_~ zIY8OkTC2I=+r6@}iLgFswhvq!Cy}Z8YDfq@5mv+%NY*-?TdlnVE8XAg9yI#L*`v}G z{#BB=@ZLTs@huP*E6+)7Y-X#E+P9hqgKp#asMGJ2NX5qH;oj{A7Ss?J=gv;=*Ecq8 zU8>exo>rYyd+)G;nv~|!iUj9izYlWpQY1ctfZ|7l;5tO8#b8w<=B+w%qu`O6h6upa z89Yi*x5Ga)1sx zJ%tj!6<&C`YJSIM3QjvE1Eh$QH1?>7IaeF`Ow6fdG?DjaX zY2(of&Wws<86YKMt|F)+m-UVY-C857`L0qpeh~B&{lu4^1-=&G4xWinbr9~hGST;$ z9MZA+wlPG!ebl#NsRL1GmfV^35V^GV@u1tXDF$V!d1+ZI)A2K(QR1%bkL^E z6ptdongHqI$}-|G)}HqHozGQpk;{gvh;5CWsdz#vxK+V%p|Y}lm%H4ru+{I5-nKv| z$ElhqVJc2W2+=X`OK%crU!Tm&Sq!~ZJF2@Rs*Ysj85L5$1~Y?zx(+oHGKzZmP@-_! z%(^Y6>QsEq)x44PB`mBrdbMt|({CQN7iHRZ`$ci9H#&`Wy|=UbnY0LT`i1VDMv>3f z`ptf;v9sI$VzYnF&NOe?T5Yf2I5_G)11TA!il4HzUZX~v?(7CKej8I^R-UZZ5OU;_ z+0H~r<$cE4Or<@^`JhEP11<@$q&enuo!CN@Hk@3jj6Ezzv~r0jtm@-Qwpj!*8jI45 ziY7WilR_*;(jTK)g}w+xjA3CpaMLhcnU^S5?F5$6M#B!8k58dNt-013)EllTWKldl zg$yNnIt%UWZriW7ns*1Con3^l#;B%)FK7D(pGOeW7D>nx@<7;G|gH;G99A&A`_h_+|0e~ zhyGE=&X*=ZiK>tT*5B2Ktz%yrfvJt5dQl6c0WM8jIifIuQFy!vr2tc=5emyrsF-7J zMg-8b4cR89@9<(`9qDinyOjkF#i5Y6PO&5Wi%0N*+}PPo?VW&WoT(8 M%_`ly3Was{Z?8}7+yDRo diff --git a/package/jsda/njitclient/.Makefile.swn b/package/jsda/njitclient/.Makefile.swn deleted file mode 100644 index eda0f3609759ba514e34c5b62cabd38e40d686b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeHNO^hQ)6|UtkF%W_R3KAD8JA-x%9(!kVU>PwHGam2YtjA;gvk3xeRBo5YwbSlu zRd72)Mxktq@%JUUhZbo>540;Sk!= zw>$2B^{U?YerLCaS8p{B`St2mhR+9q-#qulR^t)&{M}2;XdTnzH~Q#M1~U_Ho+%S2 z!rz<0bU&$b@9g0&qR{li=7c>?R z3I+-W-V_5#Jl?$i(BScFTQ=3#EbK@Uq8UuuYqTQ9|AtG2RsVge~7Vv z051VA0>1!$4m<;lfF95VJ`a?D-@c!*9{}G6ZUcRw0qg^H;4y#$9|QjOKE{3pd=)qZ zt^f}L|9UTDe*s1?mx)b^S}`J2yp)a z#{LMr3_J^b5BM(d9pFje-|u1UPrysSJ>Z+b5cn+cDDeAtGxjR*3h+DND?ki@(U0@%00@wjQ1N;;I_$A;09f17vQQ&|0Sk~jmo*38|5-v<3keQg1ajoRXp->8-&y9Xk|H{O_Vp`D&TQq0xmqdJ>t)K63K|i z6BXgrSevPcm4=Llrv5~7G1O<0k8nifR&2G6C8P8sF*-S6EKwzs}8>*nTyp$yKH_Vym zh`w+|Mg>s}J7GpjfHw0ooinxDzFWK@7dT^5Tf(^�khwx@yD6Mo+nlBkm=};1Uk^ zwU_d~0soNMo`__+j2yhYGgo6Qk|0pQ2@XjQC(`%zOdEuG8ai~c3gRv09aIb{dcrxD5HZd#i9NaHw(OwCtALgmX`bM$Q#!sBk&?z96cLwJMm`gBDi}>orzqd~Xc$SQtXCsKA0@)Y~TmYxN^7GMs3iBNM8?6xk^_n92hvHG?x zM7({}w_?tHs4`2=%sPl%+WL6VZP^5aGH0GEY85(u<}pg!mHm-hwgb=^QVQ}SLFZW{ zFlZnpR(ME}fXswZS!tqhvg;|DNLk(=vo^weNf>Gq^UpnAuc@{k$tw|-t22s5kzh@L zWJ!xMqA=E;_W7+(RdJ!q2C9f{g`BB)LMpgb!Ev#&y7e?qGr!7Kzo+!J1^PHn)kFbP zaWX=Hj(J~tlR*3WWM0W)==GY>NJgGfA$4gmG6<;GPzxbrsB;e`%B9Vxn_{X?#h24c zH5$rciK-j z`{(R)*~&`w-G1ZXsQU#-$r!c!l$CmoI&HeW6Ug`tOoUl^idsX+flFqmCPFIjE~(8_ z(36}GT9h-820xZG$9%36TYg-d$%QJ|!*WC`mw3XeKAvQoMG&K5$YoMA(Fs};Vla~a z7%eLFMId5~2+INM!f$0tq8PPvm!pkF9JCytLV_A{y*1cxq^%%}-svf1D8bzXw7s)s zzuss*J?L!jAZ#@TG#!lD+DhH#+dELXG$SolY)rdLeG*L*{FrP!;Jy8ui?@ym+q}F3+0_f1fp)?1RE6NlDuPHlL@GB7=BbXtMMY{Rui(!UZF5+=dO*&}2;+{8 zTa9kd#@035tR};$6(Q1AZ#rYswwR{bVBl$*u!3YdMAbzGrk+SA?PWjok2-d$Gzm&m zl^n44mOg9^`_kY`%?nkF8Xt{qE^XzA!URU)@gkH0%$7zdEIXkhj%gVYKr=REo0x)W zj9N&e5=9lO)QaI}WCA4j5VVp;YwS5re6o@RNGaTG4W?lR2Y_(ed=b@-+|`-P9Ww6| zRHyAW&Q+^36x5|2#N#whmL_>LfUE@}jp&^DuM&KS7U`{|y7f$6zAKQX0LaoLFB6D1 zDtlF$3T#_+9R~7;8tv4nS>!N&>v0K84#_f_2)1mv>6mAi<82vQnnbfo_m)Cojr|9H CHS4bc diff --git a/package/jsda/njitclient/.Makefile.swo b/package/jsda/njitclient/.Makefile.swo deleted file mode 100644 index a00610e95e1c00881722228310c5d4e065537614..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 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 Fy#ZXA?7;v4 diff --git a/package/jsda/njitclient/Install.html b/package/jsda/njitclient/Install.html old mode 100755 new mode 100644 diff --git a/package/jsda/njitclient/License/gpl-3.0-standalone.html b/package/jsda/njitclient/License/gpl-3.0-standalone.html old mode 100755 new mode 100644 diff --git a/package/jsda/njitclient/Makefile.am b/package/jsda/njitclient/Makefile.am old mode 100755 new mode 100644 diff --git a/package/jsda/njitclient/ReadMe.html b/package/jsda/njitclient/ReadMe.html old mode 100755 new mode 100644 diff --git a/package/jsda/njitclient/configure.ac b/package/jsda/njitclient/configure.ac old mode 100755 new mode 100644 diff --git a/package/jsda/njitclient/documents/Documents.html b/package/jsda/njitclient/documents/Documents.html old mode 100755 new mode 100644 diff --git a/package/jsda/njitclient/src-gui/gtkgui/AUTHORS b/package/jsda/njitclient/src-gui/gtkgui/AUTHORS old mode 100755 new mode 100644 diff --git a/package/jsda/njitclient/src-gui/gtkgui/COPYING b/package/jsda/njitclient/src-gui/gtkgui/COPYING old mode 100755 new mode 100644 diff --git a/package/jsda/njitclient/src-gui/gtkgui/ChangeLog b/package/jsda/njitclient/src-gui/gtkgui/ChangeLog old mode 100755 new mode 100644 diff --git a/package/jsda/njitclient/src-gui/gtkgui/HACKING b/package/jsda/njitclient/src-gui/gtkgui/HACKING old mode 100755 new mode 100644 diff --git a/package/jsda/njitclient/src-gui/gtkgui/Makefile.am b/package/jsda/njitclient/src-gui/gtkgui/Makefile.am old mode 100755 new mode 100644 diff --git a/package/jsda/njitclient/src-gui/gtkgui/NEWS b/package/jsda/njitclient/src-gui/gtkgui/NEWS old mode 100755 new mode 100644 diff --git a/package/jsda/njitclient/src-gui/gtkgui/configure.ac b/package/jsda/njitclient/src-gui/gtkgui/configure.ac old mode 100755 new mode 100644 diff --git a/package/jsda/njitclient/src-gui/gtkgui/tests/Makefile.am b/package/jsda/njitclient/src-gui/gtkgui/tests/Makefile.am old mode 100755 new mode 100644 diff --git a/package/jsda/njitclient/src-gui/luci-app-njitclient/luci_controller_njit.lua b/package/jsda/njitclient/src-gui/luci/luci_controller_njit.lua similarity index 100% rename from package/jsda/njitclient/src-gui/luci-app-njitclient/luci_controller_njit.lua rename to package/jsda/njitclient/src-gui/luci/luci_controller_njit.lua diff --git a/package/jsda/njitclient/src-gui/luci-app-njitclient/njit.lua b/package/jsda/njitclient/src-gui/luci/njit.lua similarity index 100% rename from package/jsda/njitclient/src-gui/luci-app-njitclient/njit.lua rename to package/jsda/njitclient/src-gui/luci/njit.lua diff --git a/package/jsda/njitclient/src-gui/luci-app-njitclient/readme b/package/jsda/njitclient/src-gui/luci/readme old mode 100755 new mode 100644 similarity index 100% rename from package/jsda/njitclient/src-gui/luci-app-njitclient/readme rename to package/jsda/njitclient/src-gui/luci/readme diff --git a/package/jsda/njitclient/src-gui/qt4gui/ReadMe.html b/package/jsda/njitclient/src-gui/qt4gui/ReadMe.html old mode 100755 new mode 100644 diff --git a/package/jsda/njitclient/src-gui/qt4gui/qt4gui.pro b/package/jsda/njitclient/src-gui/qt4gui/qt4gui.pro old mode 100755 new mode 100644 diff --git a/package/jsda/njitclient/src/Makefile.am b/package/jsda/njitclient/src/Makefile.am old mode 100755 new mode 100644 diff --git a/package/jsda/njitclient/src/RefreshIP.py b/package/jsda/njitclient/src/RefreshIP.py old mode 100644 new mode 100755 diff --git a/package/jsda/njitclient/src/auth.c b/package/jsda/njitclient/src/auth.c index 876e881ccd..81c36e3995 100644 --- a/package/jsda/njitclient/src/auth.c +++ b/package/jsda/njitclient/src/auth.c @@ -3,7 +3,7 @@ * 注:核心函数为Authentication(),由该函数执行801.1X认证 */ -int Authentication(const char *UserName, const char *Password, const char *DeviceName, const char *Version, const char *Key); +int Authentication(const char *UserName, const char *Password, const char *DeviceName); #include #include @@ -26,24 +26,14 @@ int Authentication(const char *UserName, const char *Password, const char *Devic #include "debug.h" // 自定义常量 -typedef enum { REQUEST = 1, - RESPONSE = 2, - SUCCESS = 3, - FAILURE = 4, - H3CDATA = 10 } EAP_Code; -typedef enum { IDENTITY = 1, - NOTIFICATION = 2, - MD5 = 4, - ALLOCATED = 7, - AVAILABLE = 20 } EAP_Type; +typedef enum {REQUEST=1, RESPONSE=2, SUCCESS=3, FAILURE=4, H3CDATA=10} EAP_Code; +typedef enum {IDENTITY=1, NOTIFICATION=2, MD5=4, AVAILABLE=20} EAP_Type; typedef uint8_t EAP_ID; -const uint8_t BroadcastAddr[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; // 广播MAC地址 -const uint8_t MultcastAddr[6] = {0x01, 0x80, 0xc2, 0x00, 0x00, 0x03}; // 多播MAC地址 -char H3C_VERSION[16]; -char H3C_KEY[64]; -//const char H3C_VERSION[16]="CH\x11V7.10-0313"; // 华为客户端版本号 +const uint8_t BroadcastAddr[6] = {0xff,0xff,0xff,0xff,0xff,0xff}; // 广播MAC地址 +const uint8_t MultcastAddr[6] = {0x01,0x80,0xc2,0x00,0x00,0x03}; // 多播MAC地址 +const char H3C_VERSION[16]="CH\x11V7.10-0313"; // 华为客户端版本号 //const char H3C_KEY[64] ="HuaWei3COM1X"; // H3C的固定密钥 -//const char H3C_KEY[64] ="Oly5D62FaE94W7"; // H3C的另一个固定密钥,网友取自MacOSX版本的iNode官方客户端 +const char H3C_KEY[64] ="Oly5D62FaE94W7"; // H3C的另一个固定密钥,网友取自MacOSX版本的iNode官方客户端 uint8_t AES_MD5req[32]; uint8_t AES_MD5data[32]; @@ -51,34 +41,29 @@ uint8_t AES_MD5data[32]; static void SendStartPkt(pcap_t *adhandle, const uint8_t mac[]); static void SendLogoffPkt(pcap_t *adhandle, const uint8_t mac[]); static void SendResponseIdentity(pcap_t *adhandle, - const uint8_t request[], - const uint8_t ethhdr[], - const uint8_t ip[4], - const char username[]); + const uint8_t request[], + const uint8_t ethhdr[], + const uint8_t ip[4], + const char username[]); static void SendFirstResponseIdentity(pcap_t *adhandle, - const uint8_t request[], - const uint8_t ethhdr[], - const uint8_t ip[4], - const char username[]); + const uint8_t request[], + const uint8_t ethhdr[], + const uint8_t ip[4], + const char username[]); static void SendResponseMD5(pcap_t *adhandle, - const uint8_t request[], - const uint8_t ethhdr[], - const char username[], - const char passwd[]); -static void SendResponsePassword(pcap_t *handle, - const uint8_t request[], - const uint8_t ethhdr[], - const char username[], - const char passwd[]); + const uint8_t request[], + const uint8_t ethhdr[], + const char username[], + const char passwd[]); static void SendResponseAvailable(pcap_t *adhandle, - const uint8_t request[], - const uint8_t ethhdr[], - const uint8_t ip[4], - const char username[]); + const uint8_t request[], + const uint8_t ethhdr[], + const uint8_t ip[4], + const char username[]); static void SendResponseNotification(pcap_t *handle, - const uint8_t request[], - const uint8_t ethhdr[]); + const uint8_t request[], + const uint8_t ethhdr[]); static void GetMacFromDevice(uint8_t mac[6], const char *devicename); @@ -87,12 +72,12 @@ static void FillWindowsVersionArea(uint8_t area[]); static void FillBase64Area(char area[]); // From fillmd5.c extern void FillMD5Area(uint8_t digest[], - uint8_t id, const char passwd[], const uint8_t srcMD5[]); + uint8_t id, const char passwd[], const uint8_t srcMD5[]); // From ip.c extern void GetIpFromDevice(uint8_t ip[4], const char DeviceName[]); -int mode = 1; //auto reconnect +int mode=1;//auto reconnect /** * 函数:Authentication() @@ -101,24 +86,20 @@ int mode = 1; //auto reconnect * 该函数将不断循环,应答802.1X认证会话,直到遇到错误后才退出 */ -int Authentication(const char *UserName, const char *Password, const char *DeviceName, const char *Version, const char *Key) +int Authentication(const char *UserName, const char *Password, const char *DeviceName) { - strcpy(H3C_VERSION, Version); - strcpy(H3C_KEY, Key); - - char errbuf[PCAP_ERRBUF_SIZE]; - pcap_t *adhandle; // adapter handle - uint8_t MAC[6]; - char FilterStr[100]; - struct bpf_program fcode; - const int DefaultTimeout = 2000; //设置接收超时参数,单位ms + char errbuf[PCAP_ERRBUF_SIZE]; + pcap_t *adhandle; // adapter handle + uint8_t MAC[6]; + char FilterStr[100]; + struct bpf_program fcode; + const int DefaultTimeout=2000;//设置接收超时参数,单位ms // NOTE: 这里没有检查网线是否已插好,网线插口可能接触不良 /* 打开适配器(网卡) */ - adhandle = pcap_open_live(DeviceName, 65536, 1, DefaultTimeout, errbuf); - if (adhandle == NULL) - { + adhandle = pcap_open_live(DeviceName,65536,1,DefaultTimeout,errbuf); + if (adhandle==NULL) { fprintf(stderr, "%s\n", errbuf); exit(-1); } @@ -126,31 +107,31 @@ int Authentication(const char *UserName, const char *Password, const char *Devic /* 查询本机MAC地址 */ GetMacFromDevice(MAC, DeviceName); - /* 生成随机数 */ - srand((unsigned)time(NULL)); + /* 生成随机数 */ + srand((unsigned)time(NULL)); -START_AUTHENTICATION: -{ - /* + START_AUTHENTICATION: + { + /* * 设置过滤器: * 初始情况下只捕获发往本机的802.1X认证会话,不接收多播信息(避免误捕获其他客户端发出的多播信息) * 进入循环体前可以重设过滤器,那时再开始接收多播信息 */ - sprintf(FilterStr, "(ether proto 0x888e) and (ether dst host %02x:%02x:%02x:%02x:%02x:%02x)", - MAC[0], MAC[1], MAC[2], MAC[3], MAC[4], MAC[5]); - pcap_compile(adhandle, &fcode, FilterStr, 1, 0xff); - pcap_setfilter(adhandle, &fcode); - int i; - int retcode; - struct pcap_pkthdr *header = NULL; - const uint8_t *captured = NULL; - uint8_t ethhdr[14] = {0}; // ethernet header - uint8_t ip[4] = {10, 0, 0, 0}; // ip address + sprintf(FilterStr, "(ether proto 0x888e) and (ether dst host %02x:%02x:%02x:%02x:%02x:%02x)", + MAC[0],MAC[1],MAC[2],MAC[3],MAC[4],MAC[5]); + pcap_compile(adhandle, &fcode, FilterStr, 1, 0xff); + pcap_setfilter(adhandle, &fcode); + int i; + int retcode; + struct pcap_pkthdr *header = NULL; + const uint8_t *captured = NULL; + uint8_t ethhdr[14]={0}; // ethernet header + uint8_t ip[4]={10,0,0,0}; // ip address - // 使用本机MAC地址生成伪装IP地址。 - ip[1] = MAC[2] ^ (uint8_t)rand(); - ip[2] = MAC[4] ^ (uint8_t)rand(); - ip[3] = MAC[5] ^ (uint8_t)rand(); + // 使用本机MAC地址生成伪装IP地址。 + ip[1] = MAC[2] ^ (uint8_t)rand(); + ip[2] = MAC[4] ^ (uint8_t)rand(); + ip[3] = MAC[5] ^ (uint8_t)rand(); /* 主动发起认证会话 */ SendStartPkt(adhandle, MAC); @@ -161,10 +142,10 @@ START_AUTHENTICATION: while (!serverIsFound) { retcode = pcap_next_ex(adhandle, &header, &captured); - if (retcode == 1 && (EAP_Code)captured[18] == REQUEST) + if (retcode==1 && (EAP_Code)captured[18]==REQUEST) serverIsFound = true; else - { // 延时后重试 + { // 延时后重试 sleep(1); //DPRINTF("."); SendStartPkt(adhandle, MAC); @@ -174,8 +155,8 @@ START_AUTHENTICATION: // 填写应答包的报头(以后无须再修改) // 默认以单播方式应答802.1X认证设备发来的Request - memcpy(ethhdr + 0, captured + 6, 6); - memcpy(ethhdr + 6, MAC, 6); + memcpy(ethhdr+0, captured+6, 6); + memcpy(ethhdr+6, MAC, 6); ethhdr[12] = 0x88; ethhdr[13] = 0x8e; @@ -189,20 +170,20 @@ START_AUTHENTICATION: // 继续接收下一个Request包 retcode = pcap_next_ex(adhandle, &header, &captured); - assert(retcode == 1); + assert(retcode==1); assert((EAP_Code)captured[18] == REQUEST); } // 分情况应答下一个包 if ((EAP_Type)captured[22] == IDENTITY) - { // 通常情况会收到包Request Identity,应回答Response Identity + { // 通常情况会收到包Request Identity,应回答Response Identity DPRINTF("[%d] Server: Request Identity!\n", captured[19]); GetIpFromDevice(ip, DeviceName); SendFirstResponseIdentity(adhandle, captured, ethhdr, ip, UserName); DPRINTF("[%d] Client: Response First Identity.\n", (EAP_ID)captured[19]); } else if ((EAP_Type)captured[22] == AVAILABLE) - { // 遇到AVAILABLE包时需要特殊处理 + { // 遇到AVAILABLE包时需要特殊处理 // 中南财经政法大学目前使用的格式: // 收到第一个Request AVAILABLE时要回答Response Identity DPRINTF("[%d] Server: Request AVAILABLE!\n", captured[19]); @@ -213,7 +194,7 @@ START_AUTHENTICATION: // 重设过滤器,只捕获华为802.1X认证设备发来的包(包括多播Request Identity / Request AVAILABLE) sprintf(FilterStr, "(ether proto 0x888e) and (ether src host %02x:%02x:%02x:%02x:%02x:%02x)", - captured[6], captured[7], captured[8], captured[9], captured[10], captured[11]); + captured[6],captured[7],captured[8],captured[9],captured[10],captured[11]); pcap_compile(adhandle, &fcode, FilterStr, 1, 0xff); pcap_setfilter(adhandle, &fcode); @@ -224,8 +205,8 @@ START_AUTHENTICATION: while (pcap_next_ex(adhandle, &header, &captured) != 1) { //DPRINTF("."); // 若捕获失败,则等1秒后重试 - sleep(1); // 直到成功捕获到一个数据包后再跳出 - // NOTE: 这里没有检查网线是否已被拔下或插口接触不良 + sleep(1); // 直到成功捕获到一个数据包后再跳出 + // NOTE: 这里没有检查网线是否已被拔下或插口接触不良 } // 根据收到的Request,回复相应的Response包 @@ -233,34 +214,29 @@ START_AUTHENTICATION: { switch ((EAP_Type)captured[22]) { - case IDENTITY: + case IDENTITY: DPRINTF("[%d] Server: Request Identity!\n", (EAP_ID)captured[19]); GetIpFromDevice(ip, DeviceName); SendResponseIdentity(adhandle, captured, ethhdr, ip, UserName); DPRINTF("[%d] Client: Response Identity.\n", (EAP_ID)captured[19]); break; - case AVAILABLE: + case AVAILABLE: DPRINTF("[%d] Server: Request AVAILABLE!\n", (EAP_ID)captured[19]); GetIpFromDevice(ip, DeviceName); SendResponseAvailable(adhandle, captured, ethhdr, ip, UserName); DPRINTF("[%d] Client: Response AVAILABLE.\n", (EAP_ID)captured[19]); break; - case MD5: + case MD5: DPRINTF("[%d] Server: Request MD5-Challenge!\n", (EAP_ID)captured[19]); SendResponseMD5(adhandle, captured, ethhdr, UserName, Password); DPRINTF("[%d] Client: Response MD5-Challenge.\n", (EAP_ID)captured[19]); break; - case ALLOCATED: //newtype:7;EAP_REQUEST ALLOCATED PACKAGE; - DPRINTF("[%d] Server: Request Allocated(Password)!\n", (EAP_ID)captured[19]); - SendResponsePassword(adhandle, captured, ethhdr, UserName, Password); //Send Password; - DPRINTF("[%d] Client: Response Allocated(Password).\n", (EAP_ID)captured[19]); - break; - case NOTIFICATION: + case NOTIFICATION: DPRINTF("[%d] Server: Request Notification!\n", captured[19]); SendResponseNotification(adhandle, captured, ethhdr); DPRINTF(" Client: Response Notification.\n"); break; - default: + default: DPRINTF("[%d] Server: Request (type:%d)!\n", (EAP_ID)captured[19], (EAP_Type)captured[22]); DPRINTF("Error! Unexpected request type\n"); exit(-1); @@ -268,13 +244,13 @@ START_AUTHENTICATION: } } else if ((EAP_Code)captured[18] == FAILURE) - { // 处理认证失败信息 + { // 处理认证失败信息 uint8_t errtype = captured[22]; uint8_t msgsize = captured[23]; - const char *msg = (const char *)&captured[24]; + const char *msg = (const char*) &captured[24]; DPRINTF("[%d] Server: Failure.\n", (EAP_ID)captured[19]); - if (errtype == 0x09 && msgsize > 0) - { // 输出错误提示消息 + if (errtype==0x09 && msgsize>0) + { // 输出错误提示消息 fprintf(stderr, "%s\n", msg); // 已知的几种错误如下 // E2531:用户名不存在 @@ -291,12 +267,12 @@ START_AUTHENTICATION: } else { - return 0; //exit(-1); + return 0;//exit(-1); } } - else if (errtype == 0x08) // 可能网络无流量时朊务器结束此次802.1X认证会话 + else if (errtype==0x08) // 可能网络无流量时朊务器结束此次802.1X认证会话 - { // 遇此情况客户端立刻发起新的认证会话 + { // 遇此情况客户端立刻发起新的认证会话 goto START_AUTHENTICATION; } else @@ -327,440 +303,425 @@ START_AUTHENTICATION: } } } - return (0); +return (0); } -static void GetMacFromDevice(uint8_t mac[6], const char *devicename) + + +static +void GetMacFromDevice(uint8_t mac[6], const char *devicename) { - int fd; - int err; - struct ifreq ifr; +int fd; +int err; +struct ifreq ifr; - fd = socket(PF_PACKET, SOCK_RAW, htons(0x0806)); - assert(fd != -1); +fd = socket(PF_PACKET, SOCK_RAW, htons(0x0806)); +assert(fd != -1); - assert(strlen(devicename) < IFNAMSIZ); - strncpy(ifr.ifr_name, devicename, IFNAMSIZ); - ifr.ifr_addr.sa_family = AF_INET; +assert(strlen(devicename) < IFNAMSIZ); +strncpy(ifr.ifr_name, devicename, IFNAMSIZ); +ifr.ifr_addr.sa_family = AF_INET; - err = ioctl(fd, SIOCGIFHWADDR, &ifr); - assert(err != -1); - memcpy(mac, ifr.ifr_hwaddr.sa_data, 6); +err = ioctl(fd, SIOCGIFHWADDR, &ifr); +assert(err != -1); +memcpy(mac, ifr.ifr_hwaddr.sa_data, 6); - err = close(fd); - assert(err != -1); - return; +err = close(fd); +assert(err != -1); +return; } -static void SendStartPkt(pcap_t *handle, const uint8_t localmac[]) + +static +void SendStartPkt(pcap_t *handle, const uint8_t localmac[]) { - uint8_t packet[18]; +uint8_t packet[18]; - // Ethernet Header (14 Bytes) - memcpy(packet, BroadcastAddr, 6); - memcpy(packet + 6, localmac, 6); - packet[12] = 0x88; - packet[13] = 0x8e; +// Ethernet Header (14 Bytes) +memcpy(packet, BroadcastAddr, 6); +memcpy(packet+6, localmac, 6); +packet[12] = 0x88; +packet[13] = 0x8e; - // EAPOL (4 Bytes) - packet[14] = 0x01; // Version=1 - packet[15] = 0x01; // Type=Start - packet[16] = packet[17] = 0x00; // Length=0x0000 +// EAPOL (4 Bytes) +packet[14] = 0x01; // Version=1 +packet[15] = 0x01; // Type=Start +packet[16] = packet[17] =0x00;// Length=0x0000 - // 为了兼容不同院校的网络配置,这里发送两遍Start包 - // 1、广播发送Strat包 - pcap_sendpacket(handle, packet, sizeof(packet)); - // 2、多播发送Strat包 - //memcpy(packet, MultcastAddr, 6); - //pcap_sendpacket(handle, packet, sizeof(packet)); +// 为了兼容不同院校的网络配置,这里发送两遍Start包 +// 1、广播发送Strat包 +pcap_sendpacket(handle, packet, sizeof(packet)); +// 2、多播发送Strat包 +//memcpy(packet, MultcastAddr, 6); +//pcap_sendpacket(handle, packet, sizeof(packet)); } -static void SendResponseAvailable(pcap_t *handle, const uint8_t request[], const uint8_t ethhdr[], const uint8_t ip[4], const char username[]) + +static +void SendResponseAvailable(pcap_t *handle, const uint8_t request[], const uint8_t ethhdr[], const uint8_t ip[4], const char username[]) { - int i; - uint16_t eaplen; - int usernamelen; - uint8_t response[128]; +int i; +uint16_t eaplen; +int usernamelen; +uint8_t response[128]; - assert((EAP_Code)request[18] == REQUEST); - assert((EAP_Type)request[22] == AVAILABLE); +assert((EAP_Code)request[18] == REQUEST); +assert((EAP_Type)request[22] == AVAILABLE); - // Fill Ethernet header - memcpy(response, ethhdr, 14); +// Fill Ethernet header +memcpy(response, ethhdr, 14); - // 802,1X Authentication - // { - response[14] = 0x1; // 802.1X Version 1 - response[15] = 0x0; // Type=0 (EAP Packet) - //response[16~17]留空 // Length +// 802,1X Authentication +// { + response[14] = 0x1; // 802.1X Version 1 + response[15] = 0x0; // Type=0 (EAP Packet) + //response[16~17]留空 // Length // Extensible Authentication Protocol // { - response[18] = (EAP_Code)RESPONSE; // Code - response[19] = request[19]; // ID - //response[20~21]留空 // Length - response[22] = (EAP_Type)AVAILABLE; // Type - // Type-Data - // { - i = 23; - response[i++] = 0x00; // 上报是否使用代理 - response[i++] = 0x15; // 上传IP地址 - response[i++] = 0x04; // - memcpy(response + i, ip, 4); // - i += 4; // - response[i++] = 0x06; // 携带版本号 - response[i++] = 0x07; // - FillBase64Area((char *)response + i); // - i += 28; // - response[i++] = ' '; // 两个空格符 - response[i++] = ' '; // - usernamelen = strlen(username); - memcpy(response + i, username, usernamelen); // - i += usernamelen; // - // } - // } + response[18] = (EAP_Code) RESPONSE; // Code + response[19] = request[19]; // ID + //response[20~21]留空 // Length + response[22] = (EAP_Type) AVAILABLE; // Type + // Type-Data + // { + i = 23; + response[i++] = 0x00;// 上报是否使用代理 + response[i++] = 0x15; // 上传IP地址 + response[i++] = 0x04; // + memcpy(response+i, ip, 4);// + i += 4; // + response[i++] = 0x06; // 携带版本号 + response[i++] = 0x07; // + FillBase64Area((char*)response+i);// + i += 28; // + response[i++] = ' '; // 两个空格符 + response[i++] = ' '; // + usernamelen = strlen(username); + memcpy(response+i, username, usernamelen);// + i += usernamelen; // + // } // } +// } - // 补填前面留空的两处Length - eaplen = htons(i - 18); - memcpy(response + 16, &eaplen, sizeof(eaplen)); - memcpy(response + 20, &eaplen, sizeof(eaplen)); +// 补填前面留空的两处Length +eaplen = htons(i-18); +memcpy(response+16, &eaplen, sizeof(eaplen)); +memcpy(response+20, &eaplen, sizeof(eaplen)); - // 发送 - pcap_sendpacket(handle, response, i); +// 发送 +pcap_sendpacket(handle, response, i); } -static void SendResponseIdentity(pcap_t *adhandle, const uint8_t request[], const uint8_t ethhdr[], const uint8_t ip[4], const char username[]) + +static +void SendResponseIdentity(pcap_t *adhandle, const uint8_t request[], const uint8_t ethhdr[], const uint8_t ip[4], const char username[]) { - uint8_t response[256]; - size_t i; - uint16_t eaplen; - int usernamelen; +uint8_t response[256]; +size_t i; +uint16_t eaplen; +int usernamelen; - assert((EAP_Code)request[18] == REQUEST); - assert((EAP_Type)request[22] == IDENTITY || (EAP_Type)request[22] == AVAILABLE); // 兼容中南财经政法大学情况 +assert((EAP_Code)request[18] == REQUEST); +assert((EAP_Type)request[22] == IDENTITY + ||(EAP_Type)request[22] == AVAILABLE); // 兼容中南财经政法大学情况 - // Fill Ethernet header - memcpy(response, ethhdr, 14); +// Fill Ethernet header +memcpy(response, ethhdr, 14); - // 802,1X Authentication - // { - response[14] = 0x1; // 802.1X Version 1 - response[15] = 0x0; // Type=0 (EAP Packet) - //response[16~17]留空 // Length +// 802,1X Authentication +// { + response[14] = 0x1; // 802.1X Version 1 + response[15] = 0x0; // Type=0 (EAP Packet) + //response[16~17]留空 // Length // Extensible Authentication Protocol // { - response[18] = (EAP_Code)RESPONSE; // Code - response[19] = request[19]; // ID - //response[20~21]留空 // Length - response[22] = (EAP_Type)IDENTITY; // Type - response[23] = 0x16; - response[24] = 0x20; - memcpy(response + 25, AES_MD5data, 32); - // Type-Data - // { - i = 57; - response[i++] = 0x15; // 上传IP地址 - response[i++] = 0x04; // - memcpy(response + i, ip, 4); // - i += 4; // - response[i++] = 0x06; // 携带版本号 - response[i++] = 0x07; // - FillBase64Area((char *)response + i); // - i += 28; // - response[i++] = ' '; // 两个空格符 - response[i++] = ' '; // - usernamelen = strlen(username); //末尾添加用户名 - memcpy(response + i, username, usernamelen); - i += usernamelen; - assert(i <= sizeof(response)); - // } - // } + response[18] = (EAP_Code) RESPONSE; // Code + response[19] = request[19]; // ID + //response[20~21]留空 // Length + response[22] = (EAP_Type) IDENTITY; // Type + response[23] = 0x16; + response[24] = 0x20; + memcpy(response + 25, AES_MD5data, 32); + // Type-Data + // { + i = 57; + response[i++] = 0x15; // 上传IP地址 + response[i++] = 0x04; // + memcpy(response+i, ip, 4);// + i += 4; // + response[i++] = 0x06; // 携带版本号 + response[i++] = 0x07; // + FillBase64Area((char*)response+i);// + i += 28; // + response[i++] = ' '; // 两个空格符 + response[i++] = ' '; // + usernamelen = strlen(username); //末尾添加用户名 + memcpy(response+i, username, usernamelen); + i += usernamelen; + assert(i <= sizeof(response)); + // } // } +// } - // 补填前面留空的两处Length - eaplen = htons(i - 18); - memcpy(response + 16, &eaplen, sizeof(eaplen)); - memcpy(response + 20, &eaplen, sizeof(eaplen)); +// 补填前面留空的两处Length +eaplen = htons(i-18); +memcpy(response+16, &eaplen, sizeof(eaplen)); +memcpy(response+20, &eaplen, sizeof(eaplen)); - // 发送 - pcap_sendpacket(adhandle, response, i); - return; +// 发送 +pcap_sendpacket(adhandle, response, i); +return; } void SendFirstResponseIdentity(pcap_t *adhandle, const uint8_t request[], const uint8_t ethhdr[], const uint8_t ip[4], const char username[]) { - uint8_t response[128]; - size_t i; - uint16_t eaplen; - int usernamelen; +uint8_t response[128]; +size_t i; +uint16_t eaplen; +int usernamelen; - assert((EAP_Code)request[18] == REQUEST); - assert((EAP_Type)request[22] == IDENTITY || (EAP_Type)request[22] == AVAILABLE); // 兼容中南财经政法大学情况 +assert((EAP_Code)request[18] == REQUEST); +assert((EAP_Type)request[22] == IDENTITY + ||(EAP_Type)request[22] == AVAILABLE); // 兼容中南财经政法大学情况 - // Fill Ethernet header - memcpy(response, ethhdr, 14); +// Fill Ethernet header +memcpy(response, ethhdr, 14); - // 802,1X Authentication - // { - response[14] = 0x1; // 802.1X Version 1 - response[15] = 0x0; // Type=0 (EAP Packet) - //response[16~17]留空 // Length +// 802,1X Authentication +// { + response[14] = 0x1; // 802.1X Version 1 + response[15] = 0x0; // Type=0 (EAP Packet) + //response[16~17]留空 // Length // Extensible Authentication Protocol // { - response[18] = (EAP_Code)RESPONSE; // Code - response[19] = request[19]; // ID - //response[20~21]留空 // Length - response[22] = (EAP_Type)IDENTITY; // Type - // Type-Data - // { - i = 23; - //response[i++] = 0x15; // 上传IP地址 - //response[i++] = 0x04; // - //memcpy(response+i, ip, 4);// - //i += 4; // - response[i++] = 0x06; // 携带版本号 - response[i++] = 0x07; // - FillBase64Area((char *)response + i); // - i += 28; // - response[i++] = ' '; // 两个空格符 - response[i++] = ' '; // - usernamelen = strlen(username); //末尾添加用户名 - memcpy(response + i, username, usernamelen); - i += usernamelen; - assert(i <= sizeof(response)); - // } - // } + response[18] = (EAP_Code) RESPONSE; // Code + response[19] = request[19]; // ID + //response[20~21]留空 // Length + response[22] = (EAP_Type) IDENTITY; // Type + // Type-Data + // { + i = 23; + //response[i++] = 0x15; // 上传IP地址 + //response[i++] = 0x04; // + //memcpy(response+i, ip, 4);// + //i += 4; // + response[i++] = 0x06; // 携带版本号 + response[i++] = 0x07; // + FillBase64Area((char*)response+i);// + i += 28; // + response[i++] = ' '; // 两个空格符 + response[i++] = ' '; // + usernamelen = strlen(username); //末尾添加用户名 + memcpy(response+i, username, usernamelen); + i += usernamelen; + assert(i <= sizeof(response)); + // } // } +// } - // 补填前面留空的两处Length - eaplen = htons(i - 18); - memcpy(response + 16, &eaplen, sizeof(eaplen)); - memcpy(response + 20, &eaplen, sizeof(eaplen)); +// 补填前面留空的两处Length +eaplen = htons(i-18); +memcpy(response+16, &eaplen, sizeof(eaplen)); +memcpy(response+20, &eaplen, sizeof(eaplen)); - // 发送 - pcap_sendpacket(adhandle, response, i); - return; +// 发送 +pcap_sendpacket(adhandle, response, i); +return; } -static void SendResponseMD5(pcap_t *handle, const uint8_t request[], const uint8_t ethhdr[], const char username[], const char passwd[]) + +static +void SendResponseMD5(pcap_t *handle, const uint8_t request[], const uint8_t ethhdr[], const char username[], const char passwd[]) { - uint16_t eaplen; - size_t usernamelen; - size_t packetlen; - uint8_t response[128]; +uint16_t eaplen; +size_t usernamelen; +size_t packetlen; +uint8_t response[128]; - assert((EAP_Code)request[18] == REQUEST); - assert((EAP_Type)request[22] == MD5); +assert((EAP_Code)request[18] == REQUEST); +assert((EAP_Type)request[22] == MD5); - usernamelen = strlen(username); - eaplen = htons(22 + usernamelen); - packetlen = 14 + 4 + 22 + usernamelen; // ethhdr+EAPOL+EAP+usernamelen +usernamelen = strlen(username); +eaplen = htons(22+usernamelen); +packetlen = 14+4+22+usernamelen; // ethhdr+EAPOL+EAP+usernamelen - // Fill Ethernet header - memcpy(response, ethhdr, 14); +// Fill Ethernet header +memcpy(response, ethhdr, 14); - // 802,1X Authentication - // { - response[14] = 0x1; // 802.1X Version 1 - response[15] = 0x0; // Type=0 (EAP Packet) - memcpy(response + 16, &eaplen, sizeof(eaplen)); // Length +// 802,1X Authentication +// { + response[14] = 0x1; // 802.1X Version 1 + response[15] = 0x0; // Type=0 (EAP Packet) + memcpy(response+16, &eaplen, sizeof(eaplen)); // Length // Extensible Authentication Protocol // { - response[18] = (EAP_Code)RESPONSE; // Code - response[19] = request[19]; // ID - response[20] = response[16]; // Length - response[21] = response[17]; // - response[22] = (EAP_Type)MD5; // Type - response[23] = 16; // Value-Size: 16 Bytes - FillMD5Area(response + 24, request[19], passwd, request + 24); - memcpy(response + 40, username, usernamelen); - // } + response[18] = (EAP_Code) RESPONSE;// Code + response[19] = request[19]; // ID + response[20] = response[16]; // Length + response[21] = response[17]; // + response[22] = (EAP_Type) MD5; // Type + response[23] = 16; // Value-Size: 16 Bytes + FillMD5Area(response+24, request[19], passwd, request+24); + memcpy(response+40, username, usernamelen); // } +// } - pcap_sendpacket(handle, response, packetlen); +pcap_sendpacket(handle, response, packetlen); } -static void SendResponsePassword(pcap_t *handle, const uint8_t request[], const uint8_t ethhdr[], const char username[], const char passwd[]) //SendResponsePassword(adhandle, captured, ethhdr, UserName, Password); + +static +void SendLogoffPkt(pcap_t *handle, const uint8_t localmac[]) { - uint16_t eaplen; - size_t usernamelen; - size_t passwordlen; - size_t packetlen; - uint8_t response[128]; +uint8_t packet[18]; - assert((EAP_Code)request[18] == REQUEST); - assert((EAP_Type)request[22] == ALLOCATED); +// Ethernet Header (14 Bytes) +memcpy(packet, MultcastAddr, 6); +memcpy(packet+6, localmac, 6); +packet[12] = 0x88; +packet[13] = 0x8e; - usernamelen = strlen(username); - passwordlen = strlen(passwd); - eaplen = htons(6 + usernamelen + passwordlen); - packetlen = 24 + usernamelen + passwordlen; //14+4+22+usernamelen; // ethhdr+EAPOL+EAP+usernamelen +// EAPOL (4 Bytes) +packet[14] = 0x01; // Version=1 +packet[15] = 0x02; // Type=Logoff +packet[16] = packet[17] =0x00;// Length=0x0000 - // Fill Ethernet header - memcpy(response, ethhdr, 14); - - // 802.1X Authentication - // { - response[14] = 0x1; // 802.1X Version 1 - response[15] = 0x0; // Type=0 (EAP Packet) - memcpy(response + 16, &eaplen, sizeof(eaplen)); // Length - - // Extensible Authentication Protocol - // { - response[18] = (EAP_Code)RESPONSE; // Code - response[19] = request[19]; // ID - response[20] = response[16]; // Length - response[21] = response[17]; // - response[22] = (EAP_Type)ALLOCATED; // Type - response[23] = passwordlen; // Value-Size: 16 Bytes - memcpy(response + 24, passwd, passwordlen); - memcpy(response + 24 + passwordlen + 1, username, usernamelen); //????? - // } - - pcap_sendpacket(handle, response, packetlen); +// 发包 +pcap_sendpacket(handle, packet, sizeof(packet)); } -static void SendLogoffPkt(pcap_t *handle, const uint8_t localmac[]) -{ - uint8_t packet[18]; - - // Ethernet Header (14 Bytes) - memcpy(packet, MultcastAddr, 6); - memcpy(packet + 6, localmac, 6); - packet[12] = 0x88; - packet[13] = 0x8e; - - // EAPOL (4 Bytes) - packet[14] = 0x01; // Version=1 - packet[15] = 0x02; // Type=Logoff - packet[16] = packet[17] = 0x00; // Length=0x0000 - - // 发包 - pcap_sendpacket(handle, packet, sizeof(packet)); -} // 函数: XOR(data[], datalen, key[], keylen) // // 使用密钥key[]对数据data[]进行异或加密 //(注:该函数也可反向用于解密) -static void XOR(uint8_t data[], unsigned dlen, const char key[], unsigned klen) +static +void XOR(uint8_t data[], unsigned dlen, const char key[], unsigned klen) { - unsigned int i, j; +unsigned int i,j; - // 先按正序处理一遍 - for (i = 0; i < dlen; i++) - data[i] ^= key[i % klen]; - // 再按倒序处理第二遍 - for (i = dlen - 1, j = 0; j < dlen; i--, j++) - data[i] ^= key[j % klen]; +// 先按正序处理一遍 +for (i=0; i> 2]; - area[j++] = Tbl[((c1 & 0x03) << 4) | ((c2 & 0xf0) >> 4)]; - area[j++] = Tbl[((c2 & 0x0f) << 2) | ((c3 & 0xc0) >> 6)]; - area[j++] = Tbl[c3 & 0x3f]; - } +// 然后按照Base64编码法将前面生成的20字节数据转换为28字节ASCII字符 +i = 0; +j = 0; +while (j < 24) +{ c1 = version[i++]; c2 = version[i++]; - area[24] = Tbl[(c1 & 0xfc) >> 2]; - area[25] = Tbl[((c1 & 0x03) << 4) | ((c2 & 0xf0) >> 4)]; - area[26] = Tbl[((c2 & 0x0f) << 2)]; - area[27] = '='; + c3 = version[i++]; + area[j++] = Tbl[ (c1&0xfc)>>2 ]; + area[j++] = Tbl[((c1&0x03)<<4)|((c2&0xf0)>>4) ]; + area[j++] = Tbl[ ((c2&0x0f)<<2)|((c3&0xc0)>>6)]; + area[j++] = Tbl[ c3&0x3f ]; +} +c1 = version[i++]; +c2 = version[i++]; +area[24] = Tbl[ (c1&0xfc)>>2 ]; +area[25] = Tbl[((c1&0x03)<<4)|((c2&0xf0)>>4)]; +area[26] = Tbl[ ((c2&0x0f)<<2)]; +area[27] = '='; } diff --git a/package/jsda/njitclient/src/configure.ac b/package/jsda/njitclient/src/configure.ac old mode 100755 new mode 100644 diff --git a/package/jsda/njitclient/src/main.c b/package/jsda/njitclient/src/main.c index b12ec566a1..ec55054817 100644 --- a/package/jsda/njitclient/src/main.c +++ b/package/jsda/njitclient/src/main.c @@ -5,13 +5,12 @@ #include #include -#include #include /* 子函数声明 */ -int Authentication(const char *UserName, const char *Password, const char *DeviceName, const char *Version, const char *Key); -void convert(char *dest, char const *src); +int Authentication(const char *UserName, const char *Password, const char *DeviceName); + /** * 函数:main() @@ -28,8 +27,6 @@ int main(int argc, char *argv[]) char *UserName; char *Password; char *DeviceName; - char *Version; - char *Key; /* 检查当前是否具有root权限 */ if (getuid() != 0) { @@ -40,56 +37,25 @@ int main(int argc, char *argv[]) } /* 检查命令行参数格式 */ - if (argc<3 || argc>6) { + if (argc<3 || argc>4) { 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"); + fprintf(stderr, " %s username password eth1\n", argv[0]); + fprintf(stderr, "(注:若不指明网卡,默认情况下将使用eth0)\n"); exit(-1); + } else if (argc == 4) { + DeviceName = argv[3]; // 允许从命令行指定设备名 } 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"; - } + DeviceName = "eth0"; // 缺省情况下使用的设备 } UserName = argv[1]; Password = argv[2]; /* 调用子函数完成802.1X认证 */ - Authentication(UserName, Password, DeviceName, Version, Key); + Authentication(UserName, Password, DeviceName); 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; -} \ No newline at end of file diff --git a/package/jsda/njitclient/src/md5-buildin/Makefile.am b/package/jsda/njitclient/src/md5-buildin/Makefile.am old mode 100755 new mode 100644 diff --git a/package/jsda/njitclient/src/md5-buildin/configure.ac b/package/jsda/njitclient/src/md5-buildin/configure.ac old mode 100755 new mode 100644 diff --git a/package/jsda/njitclient/src/md5-buildin/md5_dgst.c b/package/jsda/njitclient/src/md5-buildin/md5_dgst.c index 376fe79469..6efccd37a1 100644 --- a/package/jsda/njitclient/src/md5-buildin/md5_dgst.c +++ b/package/jsda/njitclient/src/md5-buildin/md5_dgst.c @@ -415,7 +415,7 @@ void HASH_BLOCK_DATA_ORDER (MD5_CTX *c, const void *p, size_t num) a=ROTATE(a,s); \ a+=b; }; -const char MD5_version[]="MD5" OPENSSL_VERSION_PTEXT; +const char MD5_version[]="MD5"; /* Implemented from RFC1321 The MD5 Message-Digest Algorithm */ diff --git a/package/jsda/njitclient/src/tests/ifchk.mk b/package/jsda/njitclient/src/tests/ifchk.mk old mode 100755 new mode 100644 diff --git a/package/jsda/njitclient/src/tests/md5test.mk b/package/jsda/njitclient/src/tests/md5test.mk old mode 100755 new mode 100644 diff --git a/package/jsda/njitclient/说明.txt b/package/jsda/njitclient/说明.txt deleted file mode 100644 index b8318b2b8c..0000000000 --- a/package/jsda/njitclient/说明.txt +++ /dev/null @@ -1 +0,0 @@ -ֱӽĿ¼ŵopenwrt\packageĿ¼мmake menuconfigеNetworkĿҵnjit8021xclient \ No newline at end of file