linux实现shell命令支持ipv4地址转换
来源:互联网 发布:剑三军爷男神捏脸数据 编辑:程序博客网 时间:2024/05/29 07:13
这几天一直都在和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说了,她说你只要没做出来就是不会,就是不简单.想想也对.
不喜欢鸡汤的各位可以直接看代码,希望能够帮助到你.
0 0
- linux实现shell命令支持ipv4地址转换
- Linux下IP地址格式转换(支持IPv4和IPv6)
- ipv4地址转换
- Linux内核中实现IPV4整数转换成字符串
- Linux IPv4 协议实现
- shell 函数实现检测字符串是否为合法的 IPv4 地址
- IPv4寿命延长:NAT地址转换
- KUbuntu 实现中文支持shell命令
- 个人实现的一个简单的ipv4地址转换为二进制显示的脚本
- linux网络socket地址(ipv4)
- linux地址重用 net.ipv4.tcp_tw_reuse
- Linux网络编程基础---IPV4地址
- IPv4 地址
- IPV4地址
- IPv4 地址
- IPv4 地址
- Linux shell mac 地址转换 convert with sed
- ping命令的C语言实现(linux, IPv4,简单版)
- CACTI :Required modules for PHP Weathermap 0.97c were not present. Not running
- 编程之美2.17—数组循环移位(旋转数组)
- Linux串口驱动分析初始化
- getBaseContext(),getApplication(),getApplicationContext()
- 市赛回顾
- linux实现shell命令支持ipv4地址转换
- 进程与线程的一个简单解释
- HDU 1062 — Text Reverse
- 安卓学习第十三天:大文件的IO,字符流,处理流,内部类,匿名内部类,线程初步
- 第6题
- 校赛总结
- Count Primes Total Accepted: 831 Total Submissions: 6167
- typedef关键字
- Spring安全权限管理(Spring Security)