由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Linux版 - Re: 有没有什么网络函数能够 (转载)
相关主题
求助:ubuntu上不了网(非无线)请问怎么获取pptp拨号后的子网?
won't take the eth0 config from /etc/network/interacesunplug the network cable, ifconfig still says up
move cable from eth1 to eth0, but cannot ping eth0shall i call system("ifconfig eth0 ... up") or write my own (转载)
请问网络高手CentOS (Linux)开机时不插网线的问题
VM中routing table消失的问题能否建立一个虚拟网卡并监听端口?
求助:ubuntu9.04 无线wpa上网失败为什么resolv.conf总被复原
How to change pc wireless mac address under Ubuntu system?网络设置问题
Linux下什么命令能知道哪个网卡插了线了?用ubuntu问题集锦
相关话题的讨论汇总
话题: ip话题: inet话题: sock话题: 网络函数话题: ifreq
进入Linux版参与讨论
1 (共1页)
T**S
发帖数: 319
1
【 以下文字转载自 Programming 讨论区 】
发信人: TINS (TINS), 信区: Programming
标 题: Re: 有没有什么网络函数能够 (转载)
发信站: BBS 未名空间站 (Thu Sep 30 23:31:56 2010, 美东)
不是的. 比如说你的机器上有两个网卡, 各有一个地址. 现在如果你要送数据到, 比如
www.google.com, 那么你发出来的数据将使用那个本地地址作为source address呢? IP
header中的一些field, 是由系统自动设定的. 当然有些field可以通过setsockopt()
来设置或getsockopt()来查询, 但souorce IP是系统根据routing table中的路由来设
置的. 现在的问题就是如何能知道到底系统选择的是哪个本地地址.
机器上可能有多个网卡, 而且每个都可能有许多IP aliases, routing table 也可能很
复杂, 所以才有这个问题.
j*a
发帖数: 14423
2
strace ip add

IP

【在 T**S 的大作中提到】
: 【 以下文字转载自 Programming 讨论区 】
: 发信人: TINS (TINS), 信区: Programming
: 标 题: Re: 有没有什么网络函数能够 (转载)
: 发信站: BBS 未名空间站 (Thu Sep 30 23:31:56 2010, 美东)
: 不是的. 比如说你的机器上有两个网卡, 各有一个地址. 现在如果你要送数据到, 比如
: www.google.com, 那么你发出来的数据将使用那个本地地址作为source address呢? IP
: header中的一些field, 是由系统自动设定的. 当然有些field可以通过setsockopt()
: 来设置或getsockopt()来查询, 但souorce IP是系统根据routing table中的路由来设
: 置的. 现在的问题就是如何能知道到底系统选择的是哪个本地地址.
: 机器上可能有多个网卡, 而且每个都可能有许多IP aliases, routing table 也可能很

a9
发帖数: 21638
3
连接的属性里应该有吧?
你看看mono里Socket里有个GetLocalIPEndpoint的代码,他们是怎么获取的,呵呆。

IP

【在 T**S 的大作中提到】
: 【 以下文字转载自 Programming 讨论区 】
: 发信人: TINS (TINS), 信区: Programming
: 标 题: Re: 有没有什么网络函数能够 (转载)
: 发信站: BBS 未名空间站 (Thu Sep 30 23:31:56 2010, 美东)
: 不是的. 比如说你的机器上有两个网卡, 各有一个地址. 现在如果你要送数据到, 比如
: www.google.com, 那么你发出来的数据将使用那个本地地址作为source address呢? IP
: header中的一些field, 是由系统自动设定的. 当然有些field可以通过setsockopt()
: 来设置或getsockopt()来查询, 但souorce IP是系统根据routing table中的路由来设
: 置的. 现在的问题就是如何能知道到底系统选择的是哪个本地地址.
: 机器上可能有多个网卡, 而且每个都可能有许多IP aliases, routing table 也可能很

s****n
发帖数: 786
4
struct ifreq ifreq;
int sock;
if((sock=socket(AF_INET,SOCK_STREAM,0))<0)
{
perror("socket");
return -1;
}
strcpy(ifreq.ifr_name,"eth1"); //change your interface here
if(ioctl(sock,SIOCGIFHWADDR,&ifreq)<0) //get your network address here
{
perror("ioctl");
return -1;
}
T**S
发帖数: 319
5
the problem is you don't know which interface the packet will use to send
out. you may have eth0, eth1, eth0:10, eth2:1, etc., in your system, and it
is the rotuting table decide the correct one.
also getsockname() or getpeername() doesn't apply either.

【在 s****n 的大作中提到】
: struct ifreq ifreq;
: int sock;
: if((sock=socket(AF_INET,SOCK_STREAM,0))<0)
: {
: perror("socket");
: return -1;
: }
: strcpy(ifreq.ifr_name,"eth1"); //change your interface here
: if(ioctl(sock,SIOCGIFHWADDR,&ifreq)<0) //get your network address here
: {

y***d
发帖数: 2330
6
strace ifconfig
socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 4
ioctl(4, SIOCGIFCONF, {80, {{"lo", {AF_INET, inet_addr("127.0.0.1")}}, {"
eth0", {AF_INET, inet_addr("xxx.xxx.xxx.xxx")}}}}) = 0

it

【在 T**S 的大作中提到】
: the problem is you don't know which interface the packet will use to send
: out. you may have eth0, eth1, eth0:10, eth2:1, etc., in your system, and it
: is the rotuting table decide the correct one.
: also getsockname() or getpeername() doesn't apply either.

a9
发帖数: 21638
7
getsockname不是就是获取本地地址的吗?

it
here

【在 T**S 的大作中提到】
: the problem is you don't know which interface the packet will use to send
: out. you may have eth0, eth1, eth0:10, eth2:1, etc., in your system, and it
: is the rotuting table decide the correct one.
: also getsockname() or getpeername() doesn't apply either.

s****n
发帖数: 786
8
The routing table still has to ask the kernel to find the outgoing interface.
Check the Linux Device Driver and you will know the details.

it

【在 T**S 的大作中提到】
: the problem is you don't know which interface the packet will use to send
: out. you may have eth0, eth1, eth0:10, eth2:1, etc., in your system, and it
: is the rotuting table decide the correct one.
: also getsockname() or getpeername() doesn't apply either.

d*********8
发帖数: 2192
9
同问。TCP握手开始之后,getsockname() 还不知道本地IP/PORT? 神奇了。

【在 a9 的大作中提到】
: getsockname不是就是获取本地地址的吗?
:
: it
: here

T**S
发帖数: 319
10
问题是可能根本就没有连接,就是想知道__如果__要送到一个地址,那么发出的数据的
source ip是什么?不管是tcp或udp等。

【在 d*********8 的大作中提到】
: 同问。TCP握手开始之后,getsockname() 还不知道本地IP/PORT? 神奇了。
d*********8
发帖数: 2192
11
OK
楼主的问题是,有没有api可以知道本机的路由和防火墙结果。
试试 Netlink 吧。
1 (共1页)
进入Linux版参与讨论
相关主题
用ubuntu问题集锦VM中routing table消失的问题
why /etc/network/interfaces doesn't show "eth0"求助:ubuntu9.04 无线wpa上网失败
make ubuntu to use static ip in command lineHow to change pc wireless mac address under Ubuntu system?
2 default gateway when have 2 eth interfacesLinux下什么命令能知道哪个网卡插了线了?
求助:ubuntu上不了网(非无线)请问怎么获取pptp拨号后的子网?
won't take the eth0 config from /etc/network/interacesunplug the network cable, ifconfig still says up
move cable from eth1 to eth0, but cannot ping eth0shall i call system("ifconfig eth0 ... up") or write my own (转载)
请问网络高手CentOS (Linux)开机时不插网线的问题
相关话题的讨论汇总
话题: ip话题: inet话题: sock话题: 网络函数话题: ifreq