[완료]dhcp discover 응답패킷을 받는법.

visualplus의 이미지

dhcp client를 만들고 있는데 초반부터 막혀버리네요..
지금 생긴 문제는

dhcp client에서 discover메세지를 보내서 dhcp server의 응답패킷을 기다리고 있는데요.
이 dhcp server가 패킷의 목적지 ip를 자신의 pool안에있는 ip로 보내더군요.
그래서 mac은 discover 메세지를 보낸 곳으로 오지만 ip가 다르기 때문에
routing을 해버려서 다시 나가버립니다.

이것을 해결 할 수 있는 방법이 있을까요?

brucewang의 이미지

여기를 보니 --> http://www.faqs.org/rfcs/rfc2131.html

"The TCP/IP software SHOULD accept and
forward to the IP layer any IP packets delivered to the client's
hardware address before the IP address is configured; "

라고 언급되어 있네요.

뭔가 테스트하시는 네트워크 configuration에 문제가 있는것은 아닐까요?

-------------------------------------------------
$yes 4 8 15 16 23 42

brucewang의 이미지

Linux의 IP layer에서 곧바로 routing이 되는가 보네요.
(참고로 저 Linux 초짜입니다. 커널 본적도 없구요)

아무래도 소스를 보시면 도움이 되시지 않을까요?
http://osdir.com/ml/network.general/2002-11/msg00092.html

그리고 서치를 해 보니 Socket Option(SO_BINDTODEVICE)
과 몇가지 설정에 대해서도 언급되어 있는 내용이 눈이 보이네요.

http://www.isc.org/index.pl?/sw/dhcp/v2-readme.php

-------------------------------------------------
$yes 4 8 15 16 23 42

김정균의 이미지

다른 네트워크라면 dhcp relay 를 운영하셔야 할 겁니다.

visualplus의 이미지

일단 지금 테스트해보고 있는게 안된다면 하나씩 읽어봐야 겠네요.
감사합니다^^

그리고 다른 네트워크가 아니구요.
pydhcplib에 raw소켓이 구현이 되어있고,
또 이것저것 검색 해 본 결과
어쩌면 discover응답패킷은 raw소켓으로 받아야 하는 것 일지도 모르겠다는 생각이 드네요.
뭐 기존 지식이 없으니 제 추측이지만요..^^

여하튼 감사합니다^^

해결되면 다시 답글 올리고 완료로 전환하겠습니다..

brucewang의 이미지

앗, 물론 IP level에서 처리되는것이니까 raw socket을 쓰셔야죠.
왠지 금방 해결하실듯한 좋은 예감.

good luck~!

-------------------------------------------------
$yes 4 8 15 16 23 42

visualplus의 이미지

쩝 제가 원하는 패킷만 받으려고 raw socket으로 받은 뒤
데이타를 분석해서 저에게 맞는 패킷만 보여주도록 해서 계속 테스트 하고 있었는데
아무래도 이상해서 그것을 없애고 모든 패킷을 다 분석해서 보니..
응답패킷 자체가 제가 예측하지 못한상태로 왔더군요..
일단 검색으로 얻은 정보대로 PF_PACKET 요걸로 소켓을 만들면 일단 모든 패킷이 다 들어오는것 같습니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.