linux實現shell命令支援ipv4地址轉換

來源:互聯網
上載者:User

標籤:inet_addr   地址轉換   

這幾天一直都在和IP地址打交道.GDB出來一個變數,就到計算機裡面看看二進位,然後每八位的去計算得出IP地址,著實不勝其煩.搜了一下網上的資訊,也沒有找到類似的工具.可能大家都覺得寫這麼一個東西太簡單了.但是其實,無論是否簡單,真正能夠產生便利的命令,就都是不錯的命令.既然沒有現成的可用,那索性就自己寫一個.算來也沒有幾行代碼.

說說這個過程的波折吧.這麼簡單一個程式,寫出來各種問題.

1. 地址的整形表示是unsigned int .最初進行地址轉換的時候調用的是atoi這個函數.試了很多次,結果都不對.當然也有對的時候.比較差異,後來才發現,原來atoi的返回值的int ,當我傳遞給atoi的參數轉成整數的範圍大於差不多2億多的時候,精度就開始出現問題,搞出來的就會被丟棄.所以就出現了錯誤.

2. 上述問題不行,換一個思路.使用sscanf.不過用了半天和上面的方法沒有區別,還是會出錯.找了半天發現.應該用%u,而不是%d.

3. 使用strtok.預設擷取到的值會覆蓋掉第一個參數.也就是說strtok的第一個參數是值-結果參數.

吃了這麼多虧,總算寫完了.支援雙向轉換.代碼如下:

#include <unistd.h>#include <netinet/in.h>#include <sys/socket.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <arpa/inet.h>int main(int argc, char ** argv){    if (argc < 2)    {        printf("usage : unless two args\n");        return 0;    }    int isstr = 0;    int i = 0;    for (i = 0; i < strlen(argv[1]); i++)    {        if (argv[1][i] == '.')        {            isstr = 1;        }    }    if (isstr)    {        unsigned int ipnum = inet_addr(argv[1]);        printf("%s : %u\n", argv[1], ipnum);    }    else    {        unsigned int ipnum;        char *ip = NULL;        struct in_addr addr;        sscanf(argv[1], "%u", &ipnum);        addr.s_addr = ipnum;        ip = inet_ntoa(addr);        printf("%u : %s \n", ipnum, ip);    }    return 0;}

使用方法可以編譯出一個可執行檔,然後放到/usr/bin.目錄下.後面就可以直接使用了.記得修改成可執行許可權.

有的時候,看似簡單的事情,實現起來還是會有意想不到的結果發生.只有體驗過,才能夠下結論.記得前一段時間去HW筆試,筆試題並沒有作出來,不是不會,在我看來其實很簡單.但是就是做錯了.回來跟GF說了,她說你只要沒做出來就是不會,就是不簡單.想想也對.

不喜歡雞湯的各位可以直接看代碼,希望能夠協助到你.

linux實現shell命令支援ipv4地址轉換

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.