首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏typecodes

    自己实现inet_aton和inet_ntoa函数功能

    inet_aton是将IPv4地址(点分法)转换成对应的十进制整数;而inet_ntoa是将十进制整数转换成对应的IPv4地址(点分法)。 ", __inet_aton( IP_ADRESS ), __inet_ntoa(__inet_aton( IP_ADRESS )) ); return 0; } 3 编译执行 使用《Linux Manual INET(3) NAME inet_aton, inet_addr, inet_network, inet_ntoa 关于inet_aton的man说明: [vfhky@typecodes ~]$ man inet_ntoa INET(3) Linux Programmer's Manual INET(3) NAME inet_aton, inet_addr, inet_network, inet_ntoa

    83910编辑于 2024-03-29
  • 来自专栏米扑专栏

    Linux网络编程IPv4和IPv6的inet_addr、inet_aton、inet_pton等函数小结

    inet_network(const char *cp); int inet_pton(int af, const char *src, void *dst); const char *inet_ntop /inet_addr                     inet_addr ip: 1241557184 inet_network ip: -1062731702 inet_network ip ------------ IP字符串 《——》 网络字节流 inet_addr、inet_aton、inet_ntoa 程序代码: #include <stdio.h> #include <sys/socket.h ("inet_pton ip: 0x%x/n", addr.s_addr); } const char *pstr = inet_ntop(AF_INET, (void *)&addr /inet_ptoa                     inet_pton ip: 1241557184 inet_pton ip: 0x4a00a8c0 inet_ntop ip: 192.168.0.74

    6.9K30发布于 2019-02-20
  • 来自专栏cloudskyme

    socket inet_pton

    inet_pton   Linux下这2个IP地址转换函数,可以在将IP地址在“点分十进制”和“整数”之间转换   而且,inet_pton和inet_ntop这2个函数能够处理ipv4和ipv6。 /inet.h>   int inet_pton(int af, const char *src, void *dst);   这个函数转换字符串到网络地址,第一个参数af是地址族,转换后存在dst中   inet_pton 是inet_addr的扩展,支持的多地址族有下列:   af = AF_INET   src为指向字符型的地址,即ASCII的地址的首地址(ddd.ddd.ddd.ddd格式的) (AF_INET, IPdotdec, (void *)&s);   printf("inet_pton: 0x%x\n", s.s_addr); // 注意得到的字节序   // 反转换   inet_ntop (AF_INET, (void *)&s, IPdotdec, 16);   printf("inet_ntop: %s\n", IPdotdec);   }

    2.6K80发布于 2018-03-20
  • 【Socket中 IP地址转换(inet_ntop、inet_pton)、字节序(htons(), htonl(), ntohs(), 和 ntohl() )】

    在Socket编程中,inet_ntop、inet_pton 以及字节序转换函数(如 htons(), htonl(), ntohs(), ntohl())是非常重要的工具,用于处理IP地址和端口号的表示与转换 先放总结 IP地址转换:二进制网络地址和点分十进制文本之间的转换; 字节序转换:大端字节序(网络) 和 小端字节序(可能是主机) 之间的转换; inet_ntop 和 inet_pton inet_ntop 函数原型: const char *inet_ntop(int af, const void *src, char *dst, socklen_t size); 其中 af 是地址族(如 AF_INET 或 AF_INET6),src 是指向网络地址结构的指针,dst 是目标字符串的缓冲区,size 是目标缓冲区的大小。 inet_pton: 这个函数与 inet_ntop 相反,它用于将可读的字符串格式的IP地址转换为网络地址结构。

    22210编辑于 2026-01-23
  • 来自专栏狂码一生

    vs2015中inet_ntoa与inet_addr不能正常使用的解决方法

    在学习c++ MFC SOCKET开发中遇到了如下的报错:     error C4996: 'inet_ntoa': Use inet_ntop() or InetNtop() instead or Step 1:在头部添加头文件 #include<WS2tcpip.h> Step 2:将inet_ntoa(clientAddr.sin_addr);替换为 char sendBuf[20] = {  '\0' }; inet_ntop(AF_INET, (void*)&clientAddr.sin_addr, sendBuf, 16); Step 3:将addr.sin_addr.S_un.S_addr =inet_addr("127.0.0.1");替换为 inet_pton(AF_INET, "127.0.0.1", (void*)&addr.sin_addr.S_un.S_addr); 最后问题完美解决

    9.2K130发布于 2018-04-28
  • 来自专栏Tungsten Fabric中文社区

    配置SDN网关:关于VRF、本地路由及inet-vpn路由

    这是一个来自TF的inet-vpn,由SDN GW导入到VRF中。SDN网关和计算节点之间的数据平面是MPLSoUDP。 这是因为我们有inet-vpn、静态、PE-CE路由,而SDN GW必须通告inet路由,并重新通告inet-vpn路由(从TF到RR)。 都有哪些策略?分别控制什么路由? 然而,该策略无法控制已经是inet-vpn路由的路由:这里是指TF路由。 这些路由首先以inet-vpn路由的形式从Tungsten Fabric来,并存储到bgp.l3vpn.0中。 了解VRF策略的范围,以及如何处理属于不同家族的路由(inetinet-vpn)是至关重要的。 如何控制来自TF的路由? 来自TF的路由是inet-vpn的,所以不能依靠VRF导出/导入策略。我们需要根据应用于会话的导出策略对RR(或远程PE)采取行动。

    3.8K00发布于 2020-12-08
  • 来自专栏sylan215 的软件测试技术学习

    由 Python2 和 Python3 中 socket.inet_aton() 实现不同引发的血案

    这几天在做一个功能实现的时候,需要把别人用 Python2.6 写好的脚步转成 Python3.4 实现,大部分地方转化都没啥问题,但是在 socket.inet_aton() 转化的过程中出了点问题 需求目的:把一个 ip 地址使用 socket.inet_aton() 转化后和一个字符串组合,然后算出 MD5。 下面是 Python2.6 的实现代码: #! (ip) + base_str).digest().encode('hex') TypeError: can't concat bytes to str 提示说的是,socket.inet_aton(ip 也就是说 Python2.6 和 python3.4 中对于 socket.inet_aton(ip) 的实现是有差异的,查官方文档吧。 python2.6文档说明: socket.inet_aton(ip_string) Convert an IPv4 address from dotted-quad string format (for

    1.3K31发布于 2020-03-02
  • 来自专栏IT杂记

    INET_ATON()函数在MySQL5.6版本和5.7版本的差异

    ,INET_ATON(?)                    可以看出在5.6上不管用于select,insert inet_aton函数,当参数为空字符串时,都能返回null,并正确处理。 而在5.7版本上,当在执行select时inet_aton能返回null,但是在insert语句中报了错,和我程序报的错一样。 至此可以看出程序中报的错就是因为MySQL5.6、5.7对inet_aton函数行为差异导致的。也就是5.7对inet_aton函数的参数有了更强的校验。      其实select中也报了同样的异常,只是把异常当作warning了,当执行完select inet_aton('');后可以看到下面有1 warning的字样。

    1.7K90发布于 2018-02-08
  • 来自专栏Linux内核及编程语言底层相关技术研究

    Linux tcp/ip 源码分析 - bind

    inet->inet_rcv_saddr = inet->inet_saddr = addr->sin_addr.s_addr; ... if ((snum || ! inet->inet_sport = htons(inet->inet_num); inet->inet_daddr = 0; inet->inet_dport = 0; ... return err; } EXPORT_SYMBOL(inet_bind); 该方法设置struct inet_sock中的字段如下 inet->inet_saddr = addr->sin_addr.s_addr ; inet->inet_sport = htons(inet->inet_num); inet->inet_daddr = 0; inet->inet_dport = 0; 可见,目标地址和端口都设置为 inet->inet_num的值赋值给inet->inet_sport,所以,inet->inet_sport的最终值就是用户传入的端口。

    3K20发布于 2019-05-30
  • 来自专栏开发内功修炼

    绑定特殊 IP 之 0.0.0.0 的内部工作原理

    *inet = inet_sk(sk); ... //bind时 将 inet_rcv_saddr 和 inet_saddr 都设置为地址 inet->inet_rcv_saddr = inet->inet_saddr = addr->sin_addr.s_addr ; //bind 时设置要使用的端口 inet->inet_sport = htons(inet->inet_num); ... } 这个函数有两个重点参数,分别是 sock 和 uaddr。 inet->inet_sport 成员上。 *inet = inet_sk(sk); //只有网络命名空间和端口等都匹配才真正计算匹配分 if (net_eq(sock_net(sk), net) && inet->inet_num ==

    2.6K31编辑于 2022-03-24
  • 来自专栏Linux内核及编程语言底层相关技术研究

    Linux tcp/ip 源码分析 - listen

    inet_connection_sock *icsk = inet_csk(sk); struct inet_sock *inet = inet_sk(sk); ... sk->sk_prot->get_port(sk, inet->inet_num)) { inet->inet_sport = htons(inet->inet_num); ... 调用sk->sk_prot->get_port(sk, inet->inet_num)方法做 listening transition 验证。 该方法的逻辑在第二篇文章中有讲。 5. err = __inet_hash(sk, NULL); ... } return err; } EXPORT_SYMBOL_GPL(inet_hash); 该方法又调用了__inet_hash ,继续看下 // net/ipv4/inet_hashtables.c int __inet_hash(struct sock *sk, struct sock *osk) { struct inet_hashinfo

    1.8K20发布于 2019-05-30
  • 来自专栏原创分享

    从内核看SO_REUSEPORT的实现(基于5.9.9)

    *inet = inet_sk(sk); if (inet->num == hnum && ! if (sk->sk_prot->get_port(sk, snum)) { inet->inet_saddr = inet->inet_rcv_saddr = 0; err = -EADDRINUSE inet_csk(sk)->icsk_bind_hash) inet_bind_hash(sk, tb, port); 会调用inet_bind_hash void inet_bind_hash sk->sk_prot->get_port(sk, inet->inet_num)) { inet->inet_sport = htons(inet->inet_num); 我们先看inet_lookup_skb,调用链很长(inet_lookup_skb->inet_lookup->inet_lookup_listener->inet_lhash2_lookup),我们只看关键代码

    1.8K21发布于 2021-07-08
  • Shell——如何拿到服务器IP地址

    前言 linux的shell中如何获取服务器的IP地址 内容 ip a | grep inet | grep -v inet6 | grep -v 127.0.0.1 | awk '{print $2} inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host inet 192.168.1.86/24 brd 192.168.1.255 通过grep去除无用的信息 [root@tb_scrm_service_kafka_3 bin]# ip a | grep inet | grep -v inet6 inet 127.0.0.1 grep,再来一次去除一次无用信息 [root@tb_scrm_service_kafka_3 bin]# ip a | grep inet | grep -v inet6 | grep -v '127.0.0.1 地址 [root@tb_scrm_service_kafka_3 bin]# ip a | grep inet | grep -v inet6 | grep -v '127.0.0.1' | awk '

    2K10编辑于 2024-08-16
  • 来自专栏python3

    Python学习之旅(二十九)

    address='74-DF-BF-5E-C3-29', netmask=None, broadcast=None, ptp=None), snic(family=<AddressFamily.AF_INET address='76-DF-BF-5E-C3-29', netmask=None, broadcast=None, ptp=None), snic(family=<AddressFamily.AF_INET address='86-DF-BF-5E-C3-29', netmask=None, broadcast=None, ptp=None), snic(family=<AddressFamily.AF_INET address='54-EE-75-A4-F6-66', netmask=None, broadcast=None, ptp=None), snic(family=<AddressFamily.AF_INET address='00-50-56-C0-00-01', netmask=None, broadcast=None, ptp=None), snic(family=<AddressFamily.AF_INET

    52020发布于 2020-01-20
  • 来自专栏全栈程序员必看

    linux tcp的timewait如何解决

    ); } // inet_hash_connect调用下面函数 int __inet_hash_connect(struct inet_timewait_death_row *death_row, **twp) { struct inet_hashinfo *hinfo = death_row->hashinfo; struct inet_sock *inet = inet_sk( sk); __be32 daddr = inet->inet_rcv_saddr; __be32 saddr = inet->inet_daddr; int dif = sk->sk_bound_dev_if (acookie, saddr, daddr); const __portpair ports = INET_COMBINED_PORTS(inet->inet_dport, lport); unsigned int hash = inet_ehashfn(net, daddr, lport, saddr, inet->inet_dport); struct inet_timewait_sock

    2.4K10编辑于 2022-06-28
  • 来自专栏Linux内核及编程语言底层相关技术研究

    Linux系统研究 - 操作系统是如何管理tcp连接的 (1)

    ; 其次,在该实例的内部,又根据socket类型的不同,划分成四个hashtable: // include/net/inet_hashtables.h struct inet_hashinfo { 来看下代码: // net/ipv4/inet_connection_sock.c int inet_csk_get_port(struct sock *sk, unsigned short snum) inet_csk(sk)->icsk_bind_hash) inet_bind_hash(sk, tb, port); } EXPORT_SYMBOL_GPL(inet_csk_get_port ); 再来看下inet_bind_hash方法: // net/ipv4/inet_hashtables.c void inet_bind_hash(struct sock *sk, struct inet_bind_bucket listen) // __sys_listen // inet_listen // inet_csk_listen_start // inet_hash

    2.8K20发布于 2019-11-07
  • 来自专栏开发内功修炼

    TCP连接中客户端的端口号是如何确定的?

    //file:net/ipv4/inet_hashtables.c int inet_hash_connect(struct inet_timewait_death_row *death_row, = inet_sk(sk)->inet_num; //获取本地端口配置 inet_get_local_port_range(&low, &high); remaining = (high - (sk)->inet_num,如果我们调用过 bind,那么这个函数会选择好端口并设置在 inet_num 上。 //file: net/ipv4/inet_hashtables.c static int __inet_check_established(struct inet_timewait_death_row , __daddr, __ports, __dif) \ ((inet_sk(__sk)->inet_portpair == (__ports)) && \ (inet_sk(__sk)->inet_daddr

    5.5K30编辑于 2022-03-24
  • 来自专栏地方网络工作室的专栏

    Shell 命令行获取本机IP,grep的练习

    inet 得到如下信息: inet 127.0.0.1 netmask 0xff000000 inet6 ::1 prefixlen 128 inet6 fe80::1%lo0 inet 192.168.12.139 netmask 0xffffff00 broadcast 192.168.12.255 inet6 fd86:415c:c5f9::c72:1c02:f044 inet6 fe80::9446:a1ff:fe5e:9b8f%awdl0 prefixlen 64 scopeid 0x9 inet6 fe80::9d71:6fa:3da5:9cb6%utun0 我们再排除掉 inet6 和 127 的信息,就可以得到我们的本地IP了 ifconfig | grep inet | grep -v inet6 | grep -v 127 得到 inet 192.168.12.139 所以我们把上面的命令修改一下,改成 ip a | grep inet | grep -v inet6 | grep -v 127 | sed 's/^[ \t]*//g' | cut -d ' ' -f2

    6.7K60发布于 2018-01-08
  • 来自专栏办公魔盒

    VB6.0 FTP文件上传器

    Public StateStyle As Integer Private Sub cmdDIR_Click() StateStyle = 0 Inet1.AccessType = icUseDefault '设置与Internet连接的类型,默认值 Inet1.Protocol = icFTP Inet1.RemotePort = 21 bln = False Inet1.Execute , , "系统提示" StateStyle = 0 Inet1.AccessType = icUseDefault '设置与Internet连接的类型,默认值 Inet1.Protocol = icFTP Inet1.RemotePort = 21 bln = False Inet1.Execute txtURL.Text, "DIR " '检索目录 End Sub Private vtData = Inet1.ResponseCode & ":" & _ Inet1.ResponseInfo Case icResponseCompleted

    3.1K20发布于 2019-07-22
  • 来自专栏云原生实验室

    CentOS 8 都发布了,你还不会用 nftables?

    bridge ebtables inet 同时适用于 IPv4 和 IPv6 的数据包,即统一了 ip 和 ip6 簇,可以更容易地定义规则,下文的示例都将采用 inet 簇。 先创建一个新的表: $ nft add table inet my_table 列出所有的规则: $ nft list ruleset table inet my_table { } 现在表中还没有任何规则 $ nft add set inet my_table my_concat_set { type ipv4_addr . inet_proto . inet_service \; } $ nft list ipv4_addr . inet_proto . inet_service } } 向集合中添加元素: $ nft add element inet my_table my_concat_set 例如: $ nft add table inet table_one $ nft add chain inet table_one my_chain $ nft add table inet table_two

    2K00发布于 2019-10-09
领券