PageRenderTime 56ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/unicornscan-0.4.7/www-front-end/lib/unimisc.php

#
PHP | 585 lines | 544 code | 41 blank | 0 comment | 53 complexity | 03f0a67ab3ee45b8919069e83952a914 MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.1
  1. <?php
  2. define(S_SHUFFLE_PORTS, 1);
  3. define(S_SRC_OVERRIDE, 2);
  4. define(S_RND_SRCIP, 4);
  5. define(S_DEFAULT_PAYLOAD, 8);
  6. define(S_BROKEN_TRANS, 16);
  7. define(S_BROKEN_NET, 32);
  8. define(S_SENDER_INTR, 64);
  9. define(IPPROTO_ICMP, 1);
  10. define(IPPROTO_TCP, 6);
  11. define(IPPROTO_UDP, 17);
  12. define(TH_FIN, 0x01);
  13. define(TH_SYN, 0x02);
  14. define(TH_RST, 0x04);
  15. define(TH_PSH, 0x08);
  16. define(TH_ACK, 0x10);
  17. define(TH_URG, 0x20);
  18. define(TH_ECE, 0x40);
  19. define(TH_CWR, 0x80);
  20. function delay_tostr($type) {
  21. switch ($type) {
  22. case 1:
  23. return "TSC";
  24. default:
  25. break;
  26. }
  27. return "?";
  28. }
  29. function sworkunit_magictostr($type) {
  30. switch ($type) {
  31. case 0x1a1b1c1d:
  32. return "TCP";
  33. case 0x2a2b2c2d:
  34. return "UDP";
  35. default:
  36. break;
  37. }
  38. return "?";
  39. }
  40. function options_tostr($flags) {
  41. $ret="";
  42. if ($flags & S_SHUFFLE_PORTS) {
  43. $ret="shuffle ports,";
  44. }
  45. else {
  46. $ret="no port shuffle,";
  47. }
  48. if ($flags & S_SRC_OVERRIDE) {
  49. $ret .= " SrcIP specified,";
  50. }
  51. else {
  52. $ret .= " SrcIP not-specified,";
  53. }
  54. if ($flags & S_DEFAULT_PAYLOAD) {
  55. $ret .= " defpayload enabled";
  56. }
  57. else {
  58. $ret .= " defpayload disabled";
  59. }
  60. return $ret;
  61. }
  62. function ipproto_tostr($ipproto) {
  63. switch ($ipproto) {
  64. case IPPROTO_ICMP:
  65. return "ICMP";
  66. case IPPROTO_TCP:
  67. return "TCP";
  68. case IPPROTO_UDP:
  69. return "UDP";
  70. default:
  71. break;
  72. }
  73. return "UNKNOWN".(int )$ipproto;
  74. }
  75. function sendopts_tostr($flags) {
  76. return "";
  77. }
  78. function recvopts_tostr($flags) {
  79. return "";
  80. }
  81. function tcpflags_tostr($num) {
  82. $str="--------";
  83. if ($num & TH_FIN) $str[0]="F";
  84. if ($num & TH_SYN) $str[1]="S";
  85. if ($num & TH_RST) $str[2]="R";
  86. if ($num & TH_PSH) $str[3]="P";
  87. if ($num & TH_ACK) $str[4]="A";
  88. if ($num & TH_URG) $str[5]="U";
  89. if ($num & TH_ECE) $str[6]="E";
  90. if ($num & TH_CWR) $str[7]="C";
  91. return $str;
  92. }
  93. function type_tostr($type, $subtype, $protocol) {
  94. switch ($protocol) {
  95. case 1:
  96. $str=sprintf("ICMP T%02xC%02x", (integer)$type, (integer)$subtype); break;
  97. case 6:
  98. $str=sprintf("TCP %s", tcpflags_tostr((integer)$type)); break;
  99. case 17:
  100. $str="UDP ";
  101. }
  102. return $str;
  103. }
  104. function icmp_tostr($type, $subtype) {
  105. switch ($type) {
  106. case 0:
  107. $ret="echo reply";
  108. if ($subtype != 0) {
  109. $ret .= ", with strange code ".(int )$subtype;
  110. }
  111. return $ret;
  112. case 3:
  113. $ret="dest unreachable";
  114. switch ($subtype) {
  115. case 0:
  116. $ret .= ", net unreachable";
  117. break;
  118. case 1:
  119. $ret .= ", host unreachable";
  120. break;
  121. case 2:
  122. $ret .= ", protocol unreachable";
  123. break;
  124. case 3:
  125. $ret .= ", port unreachable";
  126. break;
  127. case 4:
  128. $ret .= ", fragmentation needed and dont fragment was set";
  129. break;
  130. case 5:
  131. $ret .= ", source route failed";
  132. break;
  133. case 6:
  134. $ret .= ", destination network unknown";
  135. break;
  136. case 7:
  137. $ret .= ", destination host unknown";
  138. break;
  139. case 8:
  140. $ret .= ", source host isolated";
  141. break;
  142. case 9:
  143. $ret .= ", communication with destination network is administratively prohibited";
  144. break;
  145. case 10:
  146. $ret .= ", communication with destination host is administratively prohibited";
  147. break;
  148. case 11:
  149. $ret .= ", destination network unreachable for yype of service";
  150. break;
  151. case 12:
  152. $ret .= ", destination host unreachable for type of service";
  153. break;
  154. case 13:
  155. $ret .= ", communication administratively prohibited [<a href=\"http://www.faqs.org/rfcs/rfc1812.html\">RFC1812</a>]";
  156. break;
  157. case 14:
  158. $ret .= ", host precedence violation [<a href=\"http://www.faqs.org/rfcs/rfc1812.html\">RFC1812</a>]";
  159. break;
  160. case 15:
  161. $ret .= ", precedence cutoff in effect [<a href=\"http://www.faqs.org/rfcs/rfc1812.html\">RFC1812</a>]";
  162. break;
  163. default:
  164. $ret .= ", unknown reason ".(int )$subtype;
  165. }
  166. return $ret;
  167. case 4:
  168. $ret="source quench";
  169. if ($subtype != 0) {
  170. $ret .= ", with strange code ".(int )$subtype;
  171. }
  172. return $ret;
  173. case 5:
  174. $ret="redirect";
  175. switch ($subtype) {
  176. case 0:
  177. $ret .= ", redirect datagram for the network/subnet";
  178. break;
  179. case 1:
  180. $ret .= ", redirect datagram for the host";
  181. break;
  182. case 2:
  183. $ret .= ", redirect datagram for the yype of service and network";
  184. break;
  185. case 3:
  186. $ret .= ", redirect datagram for the type of service and host";
  187. break;
  188. default:
  189. $ret .= ", unknown reason ".(int )$subtype;
  190. break;
  191. }
  192. return $ret;
  193. case 6:
  194. $ret="alternate host address";
  195. switch ($subtype) {
  196. case 0:
  197. $ret .= ", alternate address for host";
  198. break;
  199. default:
  200. $ret .= ", unknown reason ".(int )$subtype;
  201. break;
  202. }
  203. return $ret;
  204. case 8:
  205. $ret="echo request";
  206. if ($subtype != 0) {
  207. $ret .= ", with strange code ".(int )$subtype;
  208. }
  209. return $ret;
  210. case 9:
  211. $ret="router advertisement";
  212. switch ($subtype) {
  213. case 0:
  214. $ret .= ", normal router advertisement";
  215. break;
  216. case 16:
  217. $ret .= ", does not route common traffic";
  218. break;
  219. default:
  220. $ret .= ", type unknown ".(int )$subtype;
  221. break;
  222. }
  223. return $ret;
  224. case 10:
  225. $ret="router selection";
  226. if ($subtype != 0) {
  227. $ret .= ", with strange code ".(int )$subtype;
  228. }
  229. return $ret;
  230. case 11:
  231. $ret="time exceeded";
  232. switch ($subtype) {
  233. case 0:
  234. $ret .= ", time to live exceeded in transit";
  235. break;
  236. case 1:
  237. $ret .= ", fragment reassembly time exceeded";
  238. break;
  239. default:
  240. $ret .= ", unknown ".(int )$subtype;
  241. break;
  242. }
  243. return $ret;
  244. case 1:
  245. case 2:
  246. case 7:
  247. $ret="unassigned [".(int )$type."]";
  248. if ($subtype != 0) {
  249. $ret .= ", with strange code ".(int )$subtype;
  250. }
  251. return $ret;
  252. default:
  253. break;
  254. }
  255. $ret="Unknown type ".(int )$type;
  256. if ($subtype != 0) {
  257. $ret .= ", with code ".(int )$subtype;
  258. }
  259. return $ret;
  260. }
  261. function getsql_resptype($data) {
  262. $add="";
  263. $not=0;
  264. $added=0;
  265. for ($tok=strtok(trim($data), ","); strlen($tok) > 0; $tok=strtok(",")) {
  266. if (strlen($add) < 1) {
  267. $add=" and (";
  268. }
  269. $ctok=trim($tok);
  270. if ($ctok[0] == "!") {
  271. $ctok=trim(substr($ctok, 1));
  272. $not=1;
  273. }
  274. else {
  275. $not=0;
  276. }
  277. if (strncasecmp($ctok, "tcp", 3) == 0) {
  278. $tcpflag_val=0;
  279. $ctok=substr($ctok, 3);
  280. for ($j=0 ; $j < strlen($ctok) ; $j++) {
  281. if (ctype_space($ctok[$j])) {
  282. continue;
  283. }
  284. switch ($ctok[$j]) {
  285. case 'F':
  286. $tcpflag_val |= 0x01;
  287. break;
  288. case 'S':
  289. $tcpflag_val |= 0x02;
  290. break;
  291. case 'R':
  292. $tcpflag_val |= 0x04;
  293. break;
  294. case 'P':
  295. $tcpflag_val |= 0x08;
  296. break;
  297. case 'A':
  298. $tcpflag_val |= 0x10;
  299. break;
  300. case 'U':
  301. $tcpflag_val |= 0x20;
  302. break;
  303. case 'E':
  304. $tcpflag_val |= 0x40;
  305. break;
  306. case 'C':
  307. $tcpflag_val |= 0x80;
  308. break;
  309. default:
  310. print "Error: unknown tcpflag `".$ctok[$j]."'<br/>\n";
  311. break;
  312. }
  313. }
  314. if ($tcpflag_val != 0) {
  315. if ($not == 0 && $added == 0) {
  316. $add .= " (proto=6 and type=".(int )$tcpflag_val.")";
  317. }
  318. else if ($not == 0 && $added == 1) {
  319. $add .= " or (proto=6 and type=".(int )$tcpflag_val.")";
  320. }
  321. else if ($not == 1 && $added == 0) {
  322. $add .= " not (proto=6 and type=".(int )$tcpflag_val.")";
  323. }
  324. else {
  325. $add .= " and not (proto=6 and type=".(int )$tcpflag_val.")";
  326. }
  327. }
  328. else {
  329. if ($not == 0 && $added == 0) {
  330. $add .= " proto=6 ";
  331. }
  332. else if ($not == 0 && $added == 1) {
  333. $add .= " or proto=6 ";
  334. }
  335. else if ($not == 1 && $added == 0) {
  336. $add .= " not proto=6 ";
  337. }
  338. else {
  339. $add .= " and not proto=6 ";
  340. }
  341. }
  342. } /* TCP */
  343. else if (strcasecmp($ctok, "udp") == 0) {
  344. if ($not == 0 && $added == 0) {
  345. $add .= " proto=17 ";
  346. }
  347. else if ($not == 0 && $added == 1) {
  348. $add .= " or proto=17 ";
  349. }
  350. else if ($not == 1 && $added == 0) {
  351. $add .= " not proto=17 ";
  352. }
  353. else {
  354. $add .= " and not proto=17 ";
  355. }
  356. }
  357. else if (strcasecmp($ctok, "icmp") == 0) {
  358. if ($not == 0 && $added == 0) {
  359. $add .= " proto=1 ";
  360. }
  361. else if ($not == 0 && $added == 1) {
  362. $add .= " or proto=1 ";
  363. }
  364. else if ($not == 1 && $added == 0) {
  365. $add .= " not proto=1 ";
  366. }
  367. else {
  368. $add .= " and not proto=1 ";
  369. }
  370. }
  371. else {
  372. print "<strong> mis-understood type filter ".htmlspecialchars($ctok).", ignoring </strong>";
  373. }
  374. $added=1;
  375. } /* for , item */
  376. return $add." ) ";
  377. }
  378. /*
  379. * generate a SQL statement for filtering based upon a PostGreSQL inet type
  380. * DO NOT PUT USER DATA INSIDE FNAME
  381. */
  382. function getsql_inet($data, $fname) {
  383. global $db; /* for escaping data */
  384. $add="";
  385. $rest="";
  386. $not=0;
  387. $added=0;
  388. for ($tok=strtok($data, ","); strlen($tok) > 0; $tok=strtok(",")) {
  389. $ctok=trim($tok);
  390. if (strlen($add) < 1) {
  391. $add=" and ( ";
  392. }
  393. if ($ctok[0] == "!") {
  394. $rest=trim(substr($ctok, 1));
  395. $not=1;
  396. }
  397. else {
  398. $rest=$ctok;
  399. $not=0;
  400. }
  401. if (strncasecmp($rest, "mac:", 4) == 0) {
  402. if ($added == 1 && $not == 0) {
  403. $add .= " or ".$fname." in (select distinct ".$fname." from uni_arpreport where hwaddr::varchar like '".substr($rest, 4)."%') ";
  404. }
  405. else if ($added == 1 && $not == 1) {
  406. $add .= " and not ".$fname." in (select distinct ".$fname." from uni_arpreport where hwaddr::varchar like '".substr($rest, 4)."%') ";
  407. }
  408. else if ($added == 0 && $not == 0) {
  409. $add .= " ".$fname." in (select distinct ".$fname." from uni_arpreport where hwaddr::varchar like '".substr($rest, 4)."%') ";
  410. }
  411. else {
  412. $add .= " not ".$fname." in (select distinct ".$fname." from uni_arpreport where hwaddr::varchar like '".substr($rest, 4)."%') ";
  413. }
  414. }
  415. else if ($added == 1 && $not == 0) {
  416. $add .= " or ".$fname." <<= inet '".trim($db->_escape_string($rest))."' ";
  417. }
  418. else if ($added == 1 && $not == 1) {
  419. $add .= " and not ".$fname." <<= inet '".trim($db->_escape_string($rest))."' ";
  420. }
  421. else if ($added == 0 && $not == 0) {
  422. $add .= " ".$fname." <<= inet '".trim($db->_escape_string($rest))."' ";
  423. }
  424. else {
  425. $add .= " not ".$fname." <<= inet '".trim($db->_escape_string($rest))."' ";
  426. }
  427. $added=1;
  428. }
  429. return $add." ) ";
  430. }
  431. /*
  432. * generate a SQL statement for filtering based upon a PostGreSQL numeric type
  433. * DO NOT PUT USER DATA INSIDE FNAME
  434. */
  435. function getsql_numeric($data, $fname) {
  436. $add="";
  437. $rest="";
  438. $not=0;
  439. $added=0;
  440. for ($tok=strtok($data, ","); strlen($tok) > 0; $tok=strtok(",")) {
  441. $ctok=trim($tok);
  442. if (strlen($add) < 1) {
  443. $add=" and ( ";
  444. }
  445. if ($ctok[0] == "!") {
  446. $rest=trim(substr($ctok, 1));
  447. $not=1;
  448. }
  449. else {
  450. $rest=$ctok;
  451. $not=0;
  452. }
  453. if ($rest[0] == ">") {
  454. $oper=">";
  455. $rest=trim(substr($rest, 1));
  456. }
  457. else if ($rest[0] == "<") {
  458. $oper="<";
  459. $rest=trim(substr($rest, 1));
  460. }
  461. else {
  462. $oper="=";
  463. }
  464. if ($added == 1 && $not == 0) {
  465. $add .= " or ".$fname." ".$oper." ".(int )$rest." ";
  466. }
  467. else if ($added == 1 && $not == 1) {
  468. $add .= " and not ".$fname." ".$oper." ".(int )$rest." ";
  469. }
  470. else if ($added == 0 && $not == 0) {
  471. $add .= " ".$fname." ".$oper." ".(int )$rest." ";
  472. }
  473. else {
  474. $add .= " not ".$fname." ".$oper." ".(int )$rest." ";
  475. }
  476. $added=1;
  477. }
  478. return $add." ) ";
  479. }
  480. function getsql_time($data, $fname) {
  481. $added=0;
  482. $not=0;
  483. $add="";
  484. for ($tok=strtok($data, ","); strlen($tok) > 0; $tok=strtok(",")) {
  485. $ctok=trim($tok);
  486. $low_ts=0;
  487. $high_ts=0;
  488. if (strlen($add) < 1) {
  489. $add=" and (";
  490. }
  491. if ($ctok[0] == "!") {
  492. $ctok=trim(substr($ctok, 1));
  493. $not=1;
  494. }
  495. time_pair($ctok, $low_ts, $high_ts);
  496. if ($not == 0 && $added == 0) {
  497. $add .= " (tstamp >= $low_ts and tstamp <= $high_ts) ";
  498. }
  499. else if ($not == 1 && $added == 0) {
  500. $add .= " (tstamp <= $low_ts or tstamp >= $high_ts)";
  501. }
  502. else if ($not == 0 && $added == 1) {
  503. $add .= " and (tstamp >= $low_ts or tstamp <= $high_ts)";
  504. }
  505. else { /* not == 1 added == 1 */
  506. $add .= " and (tstamp <= $low_ts or tstamp >= $high_ts)";
  507. }
  508. $added=1;
  509. }
  510. return $add." ) ";
  511. }
  512. ?>