IP Address Tool Header. More...
#include "network.h"
#include "tlist.h"
Go to the source code of this file.
Functions | |
tList * | read_ipaddr_file (char *fn) |
tList * | read_ipaddr_fp (FILE *fp) |
tList * | to_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) |
Definition in file ipaddr_tool.h.
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 と比較される.
lp | チェックするIPアドレス(文字列)の格納されているリスト. | |
num | 比較するIPアドレス(1byte unsigned 整数型)4Byte. 8Byte型(addr/mask)でも作動するが,ネットマスク部はされる. | |
hname | 比較するホスト名(文字列).通常は numから逆引きされたもの. |
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 }
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であってもチェック可能.
lp | チェックするIPアドレス(文字列)の格納されているリスト. | |
num | 比較するIPアドレス(バイナリ)4Byte. 8Byte型(addr/mask)でも作動するが,ネットマスク部は無視される. |
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アドレスに変換して表示する.
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でないドメイン名,文字列は / 以後を無視して文字列のままリストに格納する.
データの読み取り時に次の処理が行なわれる.
fn | ファイル名 |
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 }
tList* read_ipaddr_fp | ( | FILE * | fp | ) |
tList* read_ipaddr_fp(FILE* fp)
ファイルから IPアドレスを読み込んで,[IPアドレス]/[ネットマスク] の形式に 変換して,リストに格納する.FQDNはIPアドレスに変換される.
FQDNでないドメイン名,文字列は / 以後を無視して文字列のままリストに格納する.
データの読み取り時に次の処理が行なわれる.
fp | ファイルポインタ |
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 }
tList* to_ipaddress_list(tList* lp)
リスト中の IPアドレスを [IPアドレス]/[ネットマスク] の形式に 変換して,新しいリストに格納する.FQDNはIPアドレスに変換される.
変換に to_address_num8() を使用.CIDER対応.
FQDNでないドメイン名,文字列は / 以後を無視して文字列のまま 新しいリストに格納する. 後の is_host_in_list()などを高速に行なうための前処理.
lp | 変換前(ファイルなどから読み込んだまま)のデータの入ったリスト |
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 }