#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int main(void) {
char *ipArray[3];
char *ptr;
char str[100];
int i,j,k,a,b,c,count,len;
int num[3];
/*入力*/
printf("ご希望のipアドレスを入力してください\n");
scanf("%s",&str);
printf("ipアドレスは%sと入力されました\n",str);
/*----------使用文字の判定----------*/
for(b = 0; b < strlen(str); b++){
if(str[b] != '1'){
if(str[b] != '2'){
if(str[b] != '3'){
if(str[b] != '4'){
if(str[b] != '5'){
if(str[b] != '6'){
if(str[b] != '7'){
if(str[b] != '8'){
if(str[b] != '9'){
if(str[b] != '0'){
if(str[b] != '.'){
printf("使用不可文字が使用されています。0~9 と . のみを使用してください");
exit(1);
} } } } } } } } } } }
else{
continue;
}
}
printf("使われている数値と文字は正常です\n");
/*----------.の数の確認----------*/
count = 0;
//ptr = srcpy(str);
for(c = 0; c < strlen(str); c++){
if(str[c] == '.'){
count++;
}
}
if(count == 3){
printf(".の数は正常です\n");
}else if(count > 3){
printf(".の数が指定の数(3つ)より多いです");
exit(1);
}else{
printf(".の数が指定の数(3つ)より少ないです");
exit(1);
}
/* . と数字以外が入力されていないかの判定*/
/*----------ipArray[0]がNULLかの判定----------*/
if(str[0] == '.'){
printf("Error:第1octetがNULLです");
exit(1);
}
/*----------カンマを区切りに文字列を分割----------*/
/*1回目*/
ptr = strtok(str, ".");
ipArray[0] = ptr;
/*配列に格納されているか確認するためのprintf文*/
printf("第1octet : %s\n", ipArray[0]);
/*2回目以降*/
i = 1;
while(ptr != NULL) {
/*strtok関数により変更されたNULLのポインタが先頭*/
ptr = strtok(NULL, ".");
ipArray[i] = ptr;
/*----------ipArray[i]がNULLかの判定----------*/
if(ptr == NULL){
printf("Error:第%doctetがNULLです\n",i);
exit(1);
}
else/*(ptr != NULL) */{
printf("第%doctet : %s\n",i+1, ipArray[i]);
}
i++;
if ( i > 3 ) break;
}
/*----------文字数検査----------*/
/******エラー時は動く*****/
for(j=0; j < 4; j++){
if(strlen(ipArray[j]) < 4){
printf("第%doctetは正常です\n", j+1);
continue;
}else{
//0002は 0 < 0002 < 255なのでそれに対応するため
printf("Error:octetは1~3桁にしてください\n");
exit(1);
}
}
/*これ以降はnum[]を使用*/
/*----------文字列から数値にキャスト----------*/
num[0] = atoi(ipArray[0]);
num[1] = atoi(ipArray[1]);
num[2] = atoi(ipArray[2]);
num[3] = atoi(ipArray[3]);
for(k=0; k < 4; k++){
/***下のコメント文を入れるとError時のみ動く***/
/*0~255の範囲内か*/
if(num[k] < 0 || num[k] > 255){
printf("Error:0~255までの数字を入力してください");
exit(1);
}else{
printf("%d\n", num[k]);
}
}
/*----------プライベートアドレスの使用----------*/
if(num[0] == 10){
printf("Error:プライベートアドレスが使用されています");
exit(1);
}
else if(num[0] == 172 && num[1] >= 16 && num[1] <= 31){
printf("Error:プライベートアドレスが使用されています");
exit(1);
}
else if(num[0] == 192 && num[1] == 168){
printf("Error:プライベートアドレスが使用されています");
exit(1);
}
/*----------クラスDアドレスの使用----------*/
else if(num[0] >= 224 && num[0] <= 239){
printf("Error:クラスDアドレスが使用されています");
exit(1);
}
/*----------リンクローカルアドレスの使用----------*/
else if(num[0] == 169 && num[1] == 254){
printf("Error:リンクローカルアドレスが使用されています");
exit(1);
}
else{
printf("ipアドレスは正常です");
}
return 0;
}
/*正常時の0~255判定
NULL判定 1から3
validate_IP_adder()の作成 resultの値に応じてメッセージを表示*/
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8Y3R5cGUuaD4KCgppbnQgbWFpbih2b2lkKSB7CgoJY2hhciAqaXBBcnJheVszXTsKCWNoYXIgKnB0cjsKICBjaGFyIHN0clsxMDBdOwoJaW50IGksaixrLGEsYixjLGNvdW50LGxlbjsKICBpbnQgbnVtWzNdOwoJLyrlhaXlipsqLwoJcHJpbnRmKCLjgZTluIzmnJvjga5pcOOCouODieODrOOCueOCkuWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhFxuIik7CglzY2FuZigiJXMiLCZzdHIpOwoJcHJpbnRmKCJpcOOCouODieODrOOCueOBryVz44Go5YWl5Yqb44GV44KM44G+44GX44GfXG4iLHN0cik7CgoKCi8qLS0tLS0tLS0tLeS9v+eUqOaWh+Wtl+OBruWIpOWumi0tLS0tLS0tLS0qLwoKZm9yKGIgPSAwOyBiIDwgc3RybGVuKHN0cik7IGIrKyl7CiAgICAgIGlmKHN0cltiXSAhPSAnMScpewogICAgICAgIGlmKHN0cltiXSAhPSAnMicpewogICAgICAgICAgaWYoc3RyW2JdICE9ICczJyl7CiAgICAgICAgICAgIGlmKHN0cltiXSAhPSAnNCcpewogICAgICAgICAgICAgIGlmKHN0cltiXSAhPSAnNScpewogICAgICAgICAgICAgICAgaWYoc3RyW2JdICE9ICc2Jyl7CiAgICAgICAgICAgICAgICAgIGlmKHN0cltiXSAhPSAnNycpewogICAgICAgICAgICAgICAgICAgIGlmKHN0cltiXSAhPSAnOCcpewogICAgICAgICAgICAgICAgICAgICAgaWYoc3RyW2JdICE9ICc5Jyl7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0cltiXSAhPSAnMCcpewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0cltiXSAhPSAnLicpewogICAgICAgIHByaW50Zigi5L2/55So5LiN5Y+v5paH5a2X44GM5L2/55So44GV44KM44Gm44GE44G+44GZ44CCMO+9njnjgIDjgajjgIAu44CA44Gu44G/44KS5L2/55So44GX44Gm44GP44Gg44GV44GEIik7CiAgICAgICAgZXhpdCgxKTsKICAgICAgfSB9IH0gfSB9IH0gfSB9IH0gfSB9CiAgICAgIGVsc2V7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgfQogIH0KcHJpbnRmKCLkvb/jgo/jgozjgabjgYTjgovmlbDlgKTjgajmloflrZfjga/mraPluLjjgafjgZlcbiIpOwoKCi8qLS0tLS0tLS0tLS7jga7mlbDjga7norroqo0tLS0tLS0tLS0tKi8KCiAgICBjb3VudCA9IDA7CiAgICAvL3B0ciA9IHNyY3B5KHN0cik7CiAgICBmb3IoYyA9IDA7IGMgPCBzdHJsZW4oc3RyKTsgYysrKXsKICAgICAgaWYoc3RyW2NdID09ICcuJyl7CiAgICAgICAgY291bnQrKzsKICAgICAgfQogICAgfQoKICAgIGlmKGNvdW50ID09IDMpewogICAgICBwcmludGYoIi7jga7mlbDjga/mraPluLjjgafjgZlcbiIpOwogICAgfWVsc2UgaWYoY291bnQgPiAzKXsKICAgICAgcHJpbnRmKCIu44Gu5pWw44GM5oyH5a6a44Gu5pWw77yIM+OBpO+8ieOCiOOCiuWkmuOBhOOBp+OBmSIpOwogICAgICBleGl0KDEpOwogICAgfWVsc2V7CiAgICAgIHByaW50ZigiLuOBruaVsOOBjOaMh+WumuOBruaVsO+8iDPjgaTvvInjgojjgorlsJHjgarjgYTjgafjgZkiKTsKICAgICAgZXhpdCgxKTsKICAgIH0KCgoKCgovKiAuIOOBqOaVsOWtl+S7peWkluOBjOWFpeWKm+OBleOCjOOBpuOBhOOBquOBhOOBi+OBruWIpOWumiovCgogICAgLyotLS0tLS0tLS0taXBBcnJheVswXeOBjE5VTEzjgYvjga7liKTlrpotLS0tLS0tLS0tKi8KCiAgaWYoc3RyWzBdID09ICcuJyl7CiAgICBwcmludGYoIkVycm9y77ya56ysMW9jdGV044GMTlVMTOOBp+OBmSIpOwogICAgZXhpdCgxKTsKICB9CgoJLyotLS0tLS0tLS0t44Kr44Oz44Oe44KS5Yy65YiH44KK44Gr5paH5a2X5YiX44KS5YiG5YmyLS0tLS0tLS0tLSovCgkvKjHlm57nm64qLwoJcHRyID0gc3RydG9rKHN0ciwgIi4iKTsKCWlwQXJyYXlbMF0gPSBwdHI7CgoJLyrphY3liJfjgavmoLzntI3jgZXjgozjgabjgYTjgovjgYvnorroqo3jgZnjgovjgZ/jgoHjga5wcmludGbmlocqLwoJcHJpbnRmKCLnrKwxb2N0ZXQgOiAlc1xuIiwgaXBBcnJheVswXSk7CgoJLyoy5Zue55uu5Lul6ZmNKi8KCWkgPSAxOwogIAkJd2hpbGUocHRyICE9IE5VTEwpIHsKCQkvKnN0cnRva+mWouaVsOOBq+OCiOOCiuWkieabtOOBleOCjOOBn05VTEzjga7jg53jgqTjg7Pjgr/jgYzlhYjpoK0qLwoJCQlwdHIgPSBzdHJ0b2soTlVMTCwgIi4iKTsKCQkJaXBBcnJheVtpXSA9IHB0cjsKICAgICAgLyotLS0tLS0tLS0taXBBcnJheVtpXeOBjE5VTEzjgYvjga7liKTlrpotLS0tLS0tLS0tKi8KICAgICAgaWYocHRyID09IE5VTEwpewogICAgICAgIHByaW50ZigiRXJyb3LvvJrnrKwlZG9jdGV044GMTlVMTOOBp+OBmVxuIixpKTsKICAgICAgICBleGl0KDEpOwogICAgICB9CgkJCWVsc2UvKihwdHIgIT0gTlVMTCkgKi97CgkJCQlwcmludGYoIuesrCVkb2N0ZXQgOiAlc1xuIixpKzEsIGlwQXJyYXlbaV0pOwoJCQl9CgkJCWkrKzsKCQkJaWYgKCBpID4gMyApIGJyZWFrOwoJCX0KCS8qLS0tLS0tLS0tLeaWh+Wtl+aVsOaknOafuy0tLS0tLS0tLS0qLwovKioqKioq44Ko44Op44O85pmC44Gv5YuV44GPKioqKiovCgoJZm9yKGo9MDsgaiA8IDQ7IGorKyl7CgkJaWYoc3RybGVuKGlwQXJyYXlbal0pIDwgNCl7CgkJCXByaW50Zigi56ysJWRvY3RldOOBr+ato+W4uOOBp+OBmVxuIiwgaisxKTsKICAgICAgY29udGludWU7CgkJfWVsc2V7CiAgICAgIC8vMDAwMuOBr+OAgDAgPCAwMDAyIDwgMjU144Gq44Gu44Gn44Gd44KM44Gr5a++5b+c44GZ44KL44Gf44KBCgkJCXByaW50ZigiRXJyb3LvvJpvY3RldOOBrzHvvZ4z5qGB44Gr44GX44Gm44GP44Gg44GV44GEXG4iKTsKICAgICAgZXhpdCgxKTsKCQl9Cgl9CgogIC8q44GT44KM5Lul6ZmN44GvbnVtW13jgpLkvb/nlKgqLwogIC8qLS0tLS0tLS0tLeaWh+Wtl+WIl+OBi+OCieaVsOWApOOBq+OCreODo+OCueODiC0tLS0tLS0tLS0qLwoKCSAgICBudW1bMF0gPSBhdG9pKGlwQXJyYXlbMF0pOwogICAgICBudW1bMV0gPSBhdG9pKGlwQXJyYXlbMV0pOwogICAgICBudW1bMl0gPSBhdG9pKGlwQXJyYXlbMl0pOwogICAgICBudW1bM10gPSBhdG9pKGlwQXJyYXlbM10pOwpmb3Ioaz0wOyBrIDwgNDsgaysrKXsKCi8qKirkuIvjga7jgrPjg6Hjg7Pjg4jmlofjgpLlhaXjgozjgovjgahFcnJvcuaZguOBruOBv+WLleOBjyoqKi8KICAgICAgICAvKjDvvZ4yNTXjga7nr4Tlm7LlhoXjgYsqLwogICAgICBpZihudW1ba10gPCAwIHx8IG51bVtrXSA+IDI1NSl7CiAgICAgICAgcHJpbnRmKCJFcnJvcu+8mjDvvZ4yNTXjgb7jgafjga7mlbDlrZfjgpLlhaXlipvjgZfjgabjgY/jgaDjgZXjgYQiKTsKICAgICAgICBleGl0KDEpOwogICAgICB9ZWxzZXsKICAgICAgICBwcmludGYoIiVkXG4iLCBudW1ba10pOwogICAgICB9Cgl9CgogIC8qLS0tLS0tLS0tLeODl+ODqeOCpOODmeODvOODiOOCouODieODrOOCueOBruS9v+eUqC0tLS0tLS0tLS0qLwoKICBpZihudW1bMF0gPT0gMTApewogICAgcHJpbnRmKCJFcnJvcu+8muODl+ODqeOCpOODmeODvOODiOOCouODieODrOOCueOBjOS9v+eUqOOBleOCjOOBpuOBhOOBvuOBmSIpOwogICAgZXhpdCgxKTsKICB9CgogIGVsc2UgaWYobnVtWzBdID09IDE3MiAmJiBudW1bMV0gPj0gMTYgJiYgbnVtWzFdIDw9IDMxKXsKICAgIHByaW50ZigiRXJyb3LvvJrjg5fjg6njgqTjg5njg7zjg4jjgqLjg4njg6zjgrnjgYzkvb/nlKjjgZXjgozjgabjgYTjgb7jgZkiKTsKICAgIGV4aXQoMSk7CiAgfQoKICBlbHNlIGlmKG51bVswXSA9PSAxOTIgJiYgbnVtWzFdID09IDE2OCl7CiAgICBwcmludGYoIkVycm9y77ya44OX44Op44Kk44OZ44O844OI44Ki44OJ44Os44K544GM5L2/55So44GV44KM44Gm44GE44G+44GZIik7CiAgICBleGl0KDEpOwogIH0KCiAgLyotLS0tLS0tLS0t44Kv44Op44K5ROOCouODieODrOOCueOBruS9v+eUqC0tLS0tLS0tLS0qLwoKICBlbHNlIGlmKG51bVswXSA+PSAyMjQgJiYgbnVtWzBdIDw9IDIzOSl7CiAgICBwcmludGYoIkVycm9y77ya44Kv44Op44K5ROOCouODieODrOOCueOBjOS9v+eUqOOBleOCjOOBpuOBhOOBvuOBmSIpOwogICAgZXhpdCgxKTsKICB9CgogIC8qLS0tLS0tLS0tLeODquODs+OCr+ODreODvOOCq+ODq+OCouODieODrOOCueOBruS9v+eUqC0tLS0tLS0tLS0qLwoKICBlbHNlIGlmKG51bVswXSA9PSAxNjkgJiYgbnVtWzFdID09IDI1NCl7CiAgICBwcmludGYoIkVycm9y77ya44Oq44Oz44Kv44Ot44O844Kr44Or44Ki44OJ44Os44K544GM5L2/55So44GV44KM44Gm44GE44G+44GZIik7CiAgICBleGl0KDEpOwogIH0KCgoKCiAgZWxzZXsKICAgIHByaW50ZigiaXDjgqLjg4njg6zjgrnjga/mraPluLjjgafjgZkiKTsKICB9CgoJcmV0dXJuIDA7Cn0KCgoKCgoKCgoKCgoKLyrmraPluLjmmYLjga4w772eMjU15Yik5a6aCk5VTEzliKTlrprjgIDvvJHjgYvjgonvvJMKICB2YWxpZGF0ZV9JUF9hZGRlcigp44Gu5L2c5oiQIHJlc3VsdOOBruWApOOBq+W/nOOBmOOBpuODoeODg+OCu+ODvOOCuOOCkuihqOekuiovCg==