尝试从十六进制(基数 16)传递到十进制到 ip6 /proc/net/tcp6
我正在读取文件 /proc/net/tcp6 的内容
,并尝试将 ip6 的表示法转换为“0::1”,就像
之前使用 ipv4 一样,使用下一个方法。
struct sockaddr_in tmp_ip;
char ip_str[30];
char ipex[]='00000AF0'; /*read from the file /proc/net/tcp */
tmp_ip.sin_addr.s_addr=(int)strtoll(ipex,NULL,16);
inet_ntop(AF_INET,&tmp_ip.sin_addr,ip_str,60);
printf("ip=%s \n",ip_str);
但对于 ipv6,/proc/net/tcp6 的内容更大(33 个十六进制字符),也许我需要使用 sockaddr_in6,但变量 sin6_addr.s6_addr 是一个数组,而不是简历中的单个 log unsigned int (如 sin_addr.s_addr)
。我试图将其传递
0000000000000000FFFF00001F00C80A
给诸如
::ffff:10.200.0.31
编辑之类的东西。
嗯,也许如果我将该 ex 分解为 16 个 ex 数字并将数组输入到 sin6_addr.s_addr 中。 因为1F00C80A = 10.200.0.31(通过ntop函数)
im reading the content of the file /proc/net/tcp6
and trying to transform that notation of ip6 into a '0::1' like
previously with ipv4 y use the next method.
struct sockaddr_in tmp_ip;
char ip_str[30];
char ipex[]='00000AF0'; /*read from the file /proc/net/tcp */
tmp_ip.sin_addr.s_addr=(int)strtoll(ipex,NULL,16);
inet_ntop(AF_INET,&tmp_ip.sin_addr,ip_str,60);
printf("ip=%s \n",ip_str);
but with ipv6 the content of /proc/net/tcp6 its bigger(33 hex chars) and maybe i need to use
sockaddr_in6, but the variable sin6_addr.s6_addr is a array, not a single log unsigned int (like sin_addr.s_addr)
so in resume. i trying to pass this
0000000000000000FFFF00001F00C80A
to something like
::ffff:10.200.0.31
edit..
mmm maybe if i decompose that ex into 16 ex digits and feed the array in sin6_addr.s_addr.
Because 1F00C80A = 10.200.0.31(passing throught ntop function)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用 sscanf() 直接将字符串转换为 s6_addr 数组的元素:
You can use
sscanf()
to directly convert the string into the elements of thes6_addr
array:谢谢。
我结束了这件事。
然后 inet_ntop
我修复了它。
您需要反转每对十六进制数字。
::FFFF:10.200.0.31 在数组中结束,如下所示。
(最后一个元素)
所以你需要交换这些(在每组数字中)
所以我这样做
交换了集合,当你执行 inet_ntop 时它显示 ::FFFF:10.200.0.31
(我整天都在寻找这个 D :,我头疼)
(抱歉我的英语不好)
thanks.
i ended doing this.
then inet_ntop
i fixed it.
you need to invert every pair of hex numbers.
::FFFF:10.200.0.31 ended in the array like this.
(last elements)
so you need to swap these (in each set of numbers)
so i do this
this swap the sets and when you do a inet_ntop it shows ::FFFF:10.200.0.31
(i was looking for this all the day D:, my head hurts)
(sorry for my bad english)