xLib/ipaddr_tool.h File Reference

IP Address Tool Header. More...

#include "network.h"
#include "tlist.h"
Include dependency graph for ipaddr_tool.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

tListread_ipaddr_file (char *fn)
tListread_ipaddr_fp (FILE *fp)
tListto_ipaddress_list (tList *lp)
int is_host_in_list (tList *lp, unsigned char *, char *host)
int is_ipaddr_num_in_list (tList *lp, unsigned char *ipnum)
void print_address_in_list (FILE *fp, tList *lp)

Detailed Description

Author:
Fumi Iseki
Date:
2005 09/21

Definition in file ipaddr_tool.h.


Function Documentation

int is_host_in_list ( tList lp,
unsigned char *  num,
char *  hname 
)

int is_host_in_list(tList* lp, unsigned char* num, char* hname)

リストlpの キー部に格納されている ホスト情報と num, hname が同じネットワークに属するか どうかをチェックする.num と hname はどちらか一方が指定されていれば十分である.

先ず,lpのキー部(FQDN)と hname が比較される.つまり,キー部がドメイン名の一部の場合は hnameと比較する(後方一致).
次に,lpのキー部がドメイン名でない場合(IPアドレスの場合)は num と比較される.

Parameters:
lp チェックするIPアドレス(文字列)の格納されているリスト.
num 比較するIPアドレス(1byte unsigned 整数型)4Byte. 8Byte型(addr/mask)でも作動するが,ネットマスク部はされる.
hname 比較するホスト名(文字列).通常は numから逆引きされたもの.
Return values:
TRUE リスト中に同じネットワークに属するエントリが存在する.
FALSE リスト中に同じネットワークに属するエントリは存在しない.

Definition at line 148 of file ipaddr_tool.c.

References FALSE, is_same_network_num_ipv4, strnrvscmp(), to_address_num8_ipv4, and TRUE.

00149 {
00150     unsigned char* addr;
00151 
00152     if (lp==NULL) return FALSE;
00153     if (lp->ldat.key.buf==NULL) return FALSE;
00154     if (hname==NULL && num==NULL) return FALSE;
00155 
00156     while (lp!=NULL) {
00157         if (lp->ldat.key.buf!=NULL && strlen((const char*)lp->ldat.key.buf)>0) {
00158             addr = to_address_num8_ipv4((char*)lp->ldat.key.buf, 0);
00159             if (addr==NULL && hname!=NULL) {
00160                 if (!strnrvscmp((const char*)lp->ldat.key.buf, hname, (int)strlen((const char*)lp->ldat.key.buf))) return TRUE;
00161             }
00162             else if(addr!=NULL && num!=NULL) {
00163                 if (is_same_network_num_ipv4(addr, num, &(addr[4]))) return TRUE;
00164             }
00165         }
00166         lp = lp->next;
00167     }
00168     
00169     return FALSE;
00170 }

Here is the call graph for this function:

int is_ipaddr_num_in_list ( tList lp,
unsigned char *  num 
)

int is_ipaddr_num_in_list(tList* lp, unsigned char* num)

リストlpの キー部に格納されている ホスト情報と num が同じネットワークに属するかどうかをチェックする.
リストのキー部がFQDNであってもチェック可能.

Parameters:
lp チェックするIPアドレス(文字列)の格納されているリスト.
num 比較するIPアドレス(バイナリ)4Byte. 8Byte型(addr/mask)でも作動するが,ネットマスク部は無視される.
Return values:
TRUE リスト中に同じネットワークに属するエントリが存在する.
FALSE リスト中に同じネットワークに属するエントリは存在しない.

Definition at line 187 of file ipaddr_tool.c.

References FALSE, is_same_network_num_ipv4, to_address_num8_ipv4, and TRUE.

00188 {
00189     unsigned char* addr;
00190 
00191     if (lp==NULL || num==NULL) return FALSE;
00192     if (lp->ldat.key.buf==NULL) return FALSE;
00193 
00194     while (lp!=NULL) {
00195         if (lp->ldat.key.buf!=NULL && strlen((const char*)lp->ldat.key.buf)>0) {
00196             addr = to_address_num8_ipv4((char*)lp->ldat.key.buf, 1);
00197             if (addr!=NULL) {
00198                 if (is_same_network_num_ipv4(num, addr, &(addr[4]))) return TRUE;
00199             }
00200         }
00201         lp = lp->next;
00202     }
00203     
00204     return FALSE;
00205 }

void print_address_in_list ( FILE *  fp,
tList lp 
)

void print_address_in_list(FILE* fp, tList* lp)

リスト中のドメイン名,またはIPアドレスを表示する. FQDNはIPアドレスに変換して表示する.

Parameters:
fp 出力先のファイル記述子
lp ドメイン名またはIPアドレスをキー部に格納したリストへのポインタ

Definition at line 218 of file ipaddr_tool.c.

References to_address_num8_ipv4.

00219 {
00220     unsigned char* addr;
00221 
00222     while (lp!=NULL) {
00223         if (lp->ldat.key.buf!=NULL && strlen((const char*)lp->ldat.key.buf)>0) {
00224             addr = to_address_num8_ipv4((char*)lp->ldat.key.buf, 1);
00225             if (addr!=NULL) {   
00226                 fprintf(fp, "[%d.%d.%d.%d/%d.%d.%d.%d]\n", addr[0],addr[1],addr[2],addr[3],addr[4],addr[5],addr[6],addr[7]);
00227             }
00228             else {      // 恐らくドメイン名
00229                 fprintf(fp, "[%s]\n", lp->ldat.key.buf);
00230             }
00231         }
00232         lp = lp->next;
00233     }
00234     return;
00235 }

tList* read_ipaddr_file ( char *  fn  ) 

tList* read_ipaddr_file(char* fn)

ファイルから IPアドレスを読み込んで,[IPアドレス]/[ネットマスク] の形式に 変換して,リストに格納する.FQDNはIPアドレスに変換される.
FQDNでないドメイン名,文字列は / 以後を無視して文字列のままリストに格納する.

データの読み取り時に次の処理が行なわれる.

  • 前後の空白,CR,LFは削除される
  • 空行は無視される.
  • # 以降は無視される.
Parameters:
fn ファイル名
Returns:
リストへのポインタ

Definition at line 28 of file ipaddr_tool.c.

References del_all_tList(), read_tList_file(), and to_ipaddress_list().

00029 {
00030     tList* lp;
00031     tList* lt;
00032 
00033     lp = read_tList_file(fn, 2);
00034     if (lp==NULL) return NULL;
00035 
00036     lt = to_ipaddress_list(lp);
00037     del_all_tList(&lp);
00038 
00039     return lt;
00040 }

Here is the call graph for this function:

tList* read_ipaddr_fp ( FILE *  fp  ) 

tList* read_ipaddr_fp(FILE* fp)

ファイルから IPアドレスを読み込んで,[IPアドレス]/[ネットマスク] の形式に 変換して,リストに格納する.FQDNはIPアドレスに変換される.
FQDNでないドメイン名,文字列は / 以後を無視して文字列のままリストに格納する.

データの読み取り時に次の処理が行なわれる.

  • 前後の空白,CR,LFは削除される
  • 空行は無視される.
  • # で始まる,または 空白(複数)# で始まる行は無視される.
Parameters:
fp ファイルポインタ
Returns:
リストへのポインタ

Definition at line 58 of file ipaddr_tool.c.

References del_all_tList(), read_tList_fp(), and to_ipaddress_list().

00059 {
00060     tList* lp;
00061     tList* lt;
00062 
00063     lp = read_tList_fp(fp, 1);
00064     if (lp==NULL) return NULL;
00065 
00066     lt = to_ipaddress_list(lp);
00067     del_all_tList(&lp);
00068 
00069     return lt;
00070 }

Here is the call graph for this function:

tList* to_ipaddress_list ( tList lp  ) 

tList* to_ipaddress_list(tList* lp)

リスト中の IPアドレスを [IPアドレス]/[ネットマスク] の形式に 変換して,新しいリストに格納する.FQDNはIPアドレスに変換される.
変換に to_address_num8() を使用.CIDER対応.

FQDNでないドメイン名,文字列は / 以後を無視して文字列のまま 新しいリストに格納する. 後の is_host_in_list()などを高速に行なうための前処理.

Parameters:
lp 変換前(ファイルなどから読み込んだまま)のデータの入ったリスト
Returns:
変換して新しく生成したリスト.

Definition at line 87 of file ipaddr_tool.c.

References add_tList_node_str, awk(), to_address_char8_ipv4, and to_address_num8_ipv4.

Referenced by read_ipaddr_file(), and read_ipaddr_fp().

00088 {
00089     unsigned char* num;
00090     char*          addr;
00091     tList* ls = NULL;
00092     tList* lt = NULL;
00093 
00094     if (lp==NULL) return NULL;
00095     if (lp->ldat.key.buf==NULL) return NULL;
00096 
00097     while (lp!=NULL) {
00098         if (lp->ldat.key.buf!=NULL && strlen((const char*)lp->ldat.key.buf)>0) {
00099             if ((lp->ldat.key.buf)[0]!='#') {
00100                 num = to_address_num8_ipv4((char*)lp->ldat.key.buf, 1);
00101                 if (num!=NULL) {
00102                     addr = to_address_char8_ipv4(num);
00103                     free(num);
00104                     if (addr!=NULL) {
00105                         ls = add_tList_node_str(ls, addr, NULL);
00106                         free(addr);
00107                     }   // ここで addr==NULL となる場合はメモリ不足のみ
00108                 }
00109                 else {
00110                     addr = awk((char*)lp->ldat.key.buf, '/', 1);
00111                     if (addr!=NULL) {
00112                         int i = 0;
00113                         while(addr[i]!='\0' && addr[i]!=',' && addr[i]!=' ') i++;
00114                         addr[i] = '\0';
00115                         ls = add_tList_node_str(ls, addr, NULL);
00116                         free(addr);
00117                     }
00118                 }
00119                 if (lt==NULL) lt = ls;
00120             }
00121         }
00122         lp = lp->next;
00123     }
00124     
00125     return lt;
00126 }

Here is the call graph for this function:

Here is the caller graph for this function:


Generated on 15 Nov 2023 for JunkBox_Lib by  doxygen 1.6.1