Advertisement
Guest User

Untitled

a guest
Jul 25th, 2014
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.91 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <sys/stat.h>
  4. #include <fcntl.h>
  5. #include <unistd.h>
  6. #include <string.h>
  7. #include <stdlib.h>
  8.  
  9. #define ARP_CACHE "/proc/net/arp"
  10. #define ARP_BUFFER_LEN 1024
  11. #define ARP_DELIM " "
  12.  
  13. int readLine(int Fd, char *Buffer)
  14. {
  15. if (Fd < 0)
  16. {
  17. return -1;
  18. }
  19.  
  20. char ch;
  21. size_t Read = 0;
  22.  
  23. while (read(Fd, (Buffer + Read), 1))
  24. {
  25. ch = Buffer[Read];
  26. if (ch == 'n')
  27. {
  28. break;
  29. }
  30. Read++;
  31. }
  32.  
  33. if (Read)
  34. {
  35. Buffer[Read] = 0;
  36. return 0;
  37. }
  38.  
  39. return -1;
  40.  
  41. }
  42.  
  43. char * getField(char * Line_Arg, int Field)
  44. {
  45. char * Line = malloc(strlen(Line_Arg)), *ptr;
  46. memcpy(Line, Line_Arg, strlen(Line_Arg));
  47. ptr = Line;
  48.  
  49. char * s;
  50. s = strtok(Line, ARP_DELIM);
  51. while (Field && s)
  52. {
  53. s = strtok(NULL, ARP_DELIM);
  54. Field--;
  55. };
  56.  
  57. char * ret;
  58. if (s)
  59. {
  60. ret = (char*)malloc(strlen(s) + 1);
  61. memset(ret, 0, strlen(s) + 1);
  62. memcpy(ret, s, strlen(s));
  63. }
  64. free(ptr);
  65.  
  66. return s ? ret : NULL;
  67. }
  68.  
  69. int main()
  70. {
  71. int Fd = open(ARP_CACHE, O_RDONLY);
  72.  
  73. if (Fd < 0)
  74. {
  75. fprintf(stdout, "Arp Cache: Failed to open file "%s"n", ARP_CACHE);
  76. return 1;
  77. }
  78.  
  79. char Buffer[ARP_BUFFER_LEN];
  80.  
  81. /* Ignore first line */
  82. int Ret = readLine(Fd, &Buffer[0]);
  83.  
  84. Ret = readLine(Fd, &Buffer[0]);
  85. int count = 0;
  86.  
  87. while (Ret == 0)
  88. {
  89. char * Line;
  90. Line = &Buffer[0];
  91.  
  92. /* Get Ip, Mac, Interface */
  93. char * Ip = getField(Line, 0);
  94. char * Mac = getField(Line, 3);
  95. char * IfaceStr = getField(Line, 5);
  96.  
  97. fprintf(stdout, "%03d: Mac Address of [%s] on [%s] is "%s"n",
  98. ++count, Ip, IfaceStr, Mac);
  99.  
  100. free(Ip);
  101. free(Mac);
  102. free(IfaceStr);
  103.  
  104. Ret = readLine(Fd, &Buffer[0]);
  105. }
  106. close(Fd);
  107. return Ret;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement