[완료]libnet 관련 질문입니다. arp 패킷을 브로드캐스트로 쏴서 살아있는 Host에게 응답받아 포트스캔 하는 주제입니다.

rainroad87의 이미지

#include

int main(int argc, char *argv[])
{
int c; // 반환값 체크용 변수.
u_int32_t src, dst; // 발신자/수신자 IP 주소를 저장.
libnet_t *l; // libnet 객체
libnet_ptag_t t; // protocol tag..라는데.
char *device = NULL; // 네트워크 카드 이름..을 저장
u_int8_t *packet; // 패킷 데이터
u_int32_t packet_s; // 패킷 길이.
char errbuf[LIBNET_ERRBUF_SIZE]; // 에러메시지 저장용
libnet_ether_addr* src_mac_addr; // 내 컴퓨터의 mac 주소를 담을 변수.
// 브로드캐스팅은 전부 0xFF다. 숫자가 다 똑같으니 바이트오더 걱정할 필요도 없구나.
u_char broadcast_mac[6] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };

printf("libnet 1.1 packet shaping: ARP[link -- autobuilding ethernet]\n");

if (argc > 1)
{
device = argv[1];
}

// libpcap이 그렇듯이, 관리자 권한을 얻지 못하면 실패한다.
l = libnet_init(
LIBNET_LINK_ADV, /* injection type */
device, /* network interface */
errbuf); /* errbuf */

if (l == NULL)
{
fprintf(stderr, "%s", errbuf);
exit(EXIT_FAILURE);
}
else

// 내 컴퓨터의 IP주소 구하기.
src = libnet_get_ipaddr4(l);
// 이 부분은 문제가 좀 있는데.. 인텔 CPU와 같은 바이트오더(LE)에서만 값이 제대로 들어간다.
// PPC나 뭐.. 여튼 문제가 가능성이 많지만 귀찮으니까 그냥 써야지.
// 192.168.1.101(내 놋북 IP)
dst = (192) + (168<<8) + (1<<16) + (101<<24);
// 내 컴퓨터의 mac 주소 구하기.
src_mac_addr = libnet_get_hwaddr(l);
t = libnet_autobuild_arp(
ARPOP_REQUEST, /* operation type */
src_mac_addr->ether_addr_octet, /* sender hardware addr */
(u_int8_t *)&src, /* sender protocol addr */
broadcast_mac, /* target hardware addr */
(u_int8_t *)&dst, /* target protocol addr */
l); /* libnet context */

// 이 밑으로는 전부 arp_new.c와 같음.
if (t == -1)
{
fprintf(stderr, "Can't build ARP header: %s\n", libnet_geterror(l));
goto bad;
}

t = libnet_autobuild_ethernet(
broadcast_mac, /* ethernet destination */
ETHERTYPE_ARP, /* protocol type */
l); /* libnet handle */
if (t == -1)
{
fprintf(stderr, "Can't build ethernet header: %s\n",
libnet_geterror(l));
goto bad;
}

if (libnet_adv_cull_packet(l, &packet, &packet_s) == -1)
{
fprintf(stderr, "%s", libnet_geterror(l));
}
else
{
fprintf(stderr, "packet size: %d\n", packet_s);
libnet_adv_free_packet(l, packet);
}

c = libnet_write(l);

if (c == -1)
{
fprintf(stderr, "Write error: %s\n", libnet_geterror(l));
goto bad;
}
else
{
fprintf(stderr, "Wrote %d byte ARP packet from context \"%s\"; "
"check the wire.\n", c, libnet_cq_getlabel(l));
}
libnet_destroy(l);
return (EXIT_SUCCESS);
bad:
libnet_destroy(l);
return (EXIT_FAILURE);
}

-----------------------------------------------------------------------------------

위 소스는 제가 짠게 아니고 http://hoppang.net/src/arprequest.c 의 소스입니다.

컴파일을 하려 하는데 컴파일이 되지 않네요

libnet_ether_addr* src_mac_addr; 이부분 struct libnet_ether_addr* src_mac_addr;으로 수정했

구여 gcc -o arp arp.c 일케 컴파일 했는데 되지 않네요

libnet 컴파일할때는 옵션이 따로 있는건가요?

libnet에 문외한이라서 나름 주석보면서 분석해보기는 했는데 확실하지 않아서 질문드립니다.

위 소스가 하는일이 자신의 PC가 속해있는 네트워크(서브넷) 상의 모든 pc에게 arp패킷을 생성하여

쏘는 역활을 하는 소스가 맞는지 질문드립니다.

rainroad87의 이미지

제발 아시는분 리플좀 달아주세요.
급해요 :-)

런맨의 이미지

컴팔할때 오류메세지를 같이 올려주면 더 빠르고 정확한 답변을 받을겁니다.
소스파일올릴때

태그를 넣어주세요
 
소스에 인크루드가 한줄이게좀 이상하네요 라이브러리도 썼다는데
컴팔할때 라이브러리 -L 옵션안주신거 아닌가요?

인생은 도박이다.

rainroad87의 이미지

감사합니다^^ㅎㅎ

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.