시작 끝 ip그룹을 만들고 단일ip에 대한 그룹 찾는 로직 구현 방법

rockmgh의 이미지

안녕하세요

아이피가 해당하는 그룹을 찾는 로직을 만들고 있는데요
시작 ip와 끝 ip 가 존재 하고 시작ip 끝ip 폭이 작은게 우선순위가 높도록 만들려고 하고 있습니다.

바이너리 서치를 이용해서 해볼까 했는데 안 잘되네요..

아래 와 같은 그룹이 존재 한다고 하면 단일 대역(25~25) 이런건 바로 찾을수 있겠는데
단일 대역에 존재 하지 않은 (211)은 멀티 대역(1~255)[1] 에다가 넣어야 하는데 풀서치 말고

루프 횟수를 줄여서 찾을수 있는 방법이 있을까요??

ID start ip end ip
[1] 192.168.0.1 192.168.0.255
[2] 192.168.0.7 192.168.0.7
[3] 192.168.0.25 192.168.0.25
[4] 192.168.0.80 192.168.0.81
[5] 192.168.0.84 192.168.0.84
[6] 192.168.0.85 192.168.0.85
[7] 192.168.0.87 192.168.0.87
[8] 192.168.0.88 192.168.0.89
[9] 192.168.0.91 192.168.0.91
[10] 192.168.0.216 192.168.0.216
[11] 192.168.0.220 192.168.0.224
[12] 192.168.0.225 192.168.0.225
[13] 192.168.20.1 192.168.20.100

익명 사용자의 이미지

모든 IPv4 주소들은 16진 값에 대응합니다. 점으로 구분된 4개의 숫자를 각각 16진수로 변환한 다음 그걸 이어 붙이면 16진 IP가 됩니다. 예를 들어 192.168.0.1이라면 c0, a8, 0, 1이므로 0xc0a80001이 됩니다. 이렇게 변환한 값으로 찾는 게 쉬울 수도 있습니다.

twinwings의 이미지

트리를 이용해서 구현하면 되지 싶습니다.

1. 네트워크 주소 = prefix + postfix로 표현합니다.

2. 트리의 각 노드는 네트워크를 의미합니다.

3. 서브 네트워크인 경우 자식 노드로 표현합니다.
즉, 루트-> 리프노드로 갈 수록 네트워크 주소(prefix)의 길이가 길어집니다.

==================
탐색과정:
1. 루트 노드로 부터 시작합니다.

2. 주어진 노드에서 prefix가 같은 자식 노드를 선택합니다.
이때 주어진 노드에서 prefix가 같은 자식 노드는 유일합니다.
왜냐하면 prefix가 동일한 또 다른 노드가 존재할 경우
가정3에서 주어진 노드의 자식-자식이 되어야 하기 때문입니다.
(예를 들면, 192.180.1.0/25는 반드시 192.180.0.0/24 노드의 자식노드이어야 합니다.)

3. 2번 과정을 반복하여 더 이상 진행할 수 없으면
주어진 노드가 네트워크 주소(prefix)가 가장 긴 네트워크 입니다.

4. 만약 루트에서 더 이상 진행할 수 없으면 주어진 주소가 포함 될 수 있는
네트워크가 테이블에 존재하지 않습니다. 이 경우 Default gateway로 가야 할 것입니다.

댓글 달기

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