
获取MAC和netlink没有关系
一开始arp表是空的 假如一台linux主机(假设为19216803)要ping一个外网的ip, 通过路由表可知这个数据包要到达的下一跳网关ip, 假设为19216801 那么, 这台linux主机就广播一个arp请求:"who has 19216801 tell 19216803" 网关接收到这个arp请求后, 回应一个arp包给这台Linux主机:"19216801 is at xxxxxxxx(MAC)", 这样, 这台Linux主机就获得了下一跳的网关了, 它会把这个arp信息缓存到arp表 它不需要知道外网ip对应的MAC, 只把这个ping的ICMP数据包发给网关 同样, 这个网关也根据路由表查找下一跳的MAC
默认网关,
/etc/sysconfig/network
添加GATEWAY=<网管IP>
或者在相应的网卡配置文件里,比如网卡eth0:
/etc/sysconfig/network-scripts/ifcfg-eth0
添加GATEWAY=<网管IP>
重启网络服务,比如service network restart
如果不行,检查你的掩码设置正确与否。
linux下设置网关步骤如下:
1、使用xshell登录我们的linux服务器,本机使用的是centos65。
2、使用route -n查看本机的路由表,看到本机没有默认路由。
3、使用ip add查看本机地址,本机为1921681012,设置规划的网关为192168101254。
4、手动增加一条路由route add default gw 192168101254添加一条默认网关,然后route -n看到路由已经生效了。
5、使用route add命令增加只是临时生效,重启会丢失,需要写入配置文件里边,按照如下配置可永久生效。
问题1:
在linux系统里面获得网关地址没有专门的函数,可以通过查配置文件/proc/net/route来获得,没有更好的方法了,因为linux提供的源码包里面都是这么做的,因此你需要编写一段解析配置文件/proc/net/route的代码来完成
问题2:
我觉得用libnet得网关MAC应该不是个小例子,我也没有研究过,不好下结论,楼下继续
设置默认网关命令如下\x0d\route add default gw 192168101\x0d\设置特定路由网关命令如下\x0d\route add -net 192168100 netmask 2552552550 gw 192168101\x0d\route命令说明\x0d\\x0d\route命令用来显示或修改ip的路由表。\x0d\route add [-net|-host] [网域或主机] netmask [mask] [gw|dev]\x0d\ -net :表示后面接的路由为一个网域;\x0d\ -host :表示后面接的为连接到单部主机的路由;\x0d\ netmask :与网域有关,可以设定 netmask 决定网域的大小;\x0d\ gw :gateway 的简写,后续接的是 IP 的数值喔,与 dev 不同;\x0d\ dev :如果只是要指定由那一块网路卡连线出去,则使用这个设定,后面接 eth0 等
你的linux是如何上网的呢
如果固定IP上网,cat /etc/sysconfig/network里面gateway项
如果是dhcp上网,使用route命令,default那一行就是网关了
[root@hello ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192110 2552552550 U 0 0 0 eth0
16925400 25525500 U 0 0 0 eth0
default 192111 0000 UG 0 0 0 eth0
以上就是关于Linux下如何根据目的IP来获取下一跳网关的MAC,netlink可以实现么全部的内容,包括:Linux下如何根据目的IP来获取下一跳网关的MAC,netlink可以实现么、linux怎么设置网关、linux下如何设置网关等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)