- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
作为客户端,我执行了 socket()
,它给了我一个存储在 sktnum
中的数字。然后,我使用 sktnum
和远程地址执行 connect()
。嘿,很快,它成功了,我被告知内核已经选择了本地 IP 地址和端口号(这样服务器就知道要发送回哪里)。我调用什么函数(linux C/C++)来找出内核选择的端口和IP地址。 (请不要成为那些说“你为什么想知道”的人之一)
最佳答案
我不确定我是否正确理解你的问题。我是这样理解的:
Computer "A" uses
socket()
andconnect()
to establish a TCP connection to computer "B" which is usingsocket()
,bind()
,listen()
andaccess()
.The IP address and the TCP port on computer "B" is well known (of course - you connect to a certain TCP port on a certain computer).
But how is it possible to find out the IP address and the TCP port on computer "A" belonging to this connection?
在计算机“A”上执行此操作的函数是 getsockname()
。
在计算机“B”上 getpeername()
将返回该信息。
如果计算机“B”有多个 IP 地址(例如多个网卡),计算机“B”也可以使用 getsockname()
来获取自己的 IP 地址。
在调用 connect()
之前,套接字还没有端口号和 IP 地址。因此,在调用 connect()
之前调用 getsockname()
是没有意义的。
原因很简单:如果一台计算机有多个具有不同 IP 地址的网卡,则在知道必须使用哪一个网卡之前,无法知道计算机“A”侧的 IP 地址。 (请注意,localhost
被操作系统视为单独的“网卡”,IP 地址为 127.0.0.1!)
编辑
But I think you might only get ... 192.168. ... It doesn't give you the ... IP address you are alloted on the internet.Your problem can be explained the following way:
互联网的最初想法是每台计算机都有自己的全局 IP 地址(这就是您所说的:“您在互联网上分配的地址”)。
这个想法从未改变:几乎所有 PC 软件(包括操作系统)都是为具有全局 IP 地址的计算机编写的。
由于您的提供商只能为您提供一个 IP 地址,因此您的路由器通过“模拟”本地计算机具有全局地址(例如在 192.168 范围内)的互联网来“欺骗”您的计算机。
由于这种“模拟”,计算机的行为就像 192.168.x.y 是其在互联网中的全局 IP 地址一样。计算机甚至没有任何关于这不是全局 IP 地址这一事实的信息!
很明显,这些函数返回 192.168.x.y,因为操作系统“认为”这是互联网上的全局地址!
唯一拥有有关真实全局地址(以及真实 TCP 端口!!!)信息的设备是路由器!
许多提供商使用 CGNAT,这意味着即使多个互联网连接也共享一个 IP 地址。在这种情况下,唯一拥有该信息的设备是提供商的路由器。
如果您需要真实的 IP 地址和真实的 TCP 端口(如从互联网上看到的),您将从路由器获取该信息。根据路由器型号,将无法获取有关真实地址的信息。
我怀疑市面上有没有路由器可以让你读出真实的TCP端口。
这是开发 IPv6 的原因之一:通过 IPv6,任何计算机都可以再次拥有自己的 IP 地址...
关于c - 哪个函数告诉我内核将本地套接字绑定(bind)到哪个地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46803345/
为了遵循务实的编程原则,我试图根据“告诉,不要询问”原则来决定如何处理用户密码更改。 我有一个用户对象,其密码每 30 天过期一次。如果密码过期,我需要能够显示密码过期/更改密码 View 。询问对象
我试图在接收文件时绕过任何本地存储。根据documentation ,如果“合理”,Flask 会将文件保存在内存中,否则会将它们存储在临时位置。 我只找到了一种通常使用 MAX_CONTENT_LE
SAS 在 proc 中返回 sci-notation 意味着总和输出,我不能将其用于进一步的速率计算过程。如何抑制 SAS 产生 sci-notation,有什么想法吗?提前致谢。 “解决了一个类似
当使用 nohup 时,脚本的输出会被缓冲,只有在脚本执行完毕后才会转储到日志文件 (nohup.out) 中。以接近实时的方式查看脚本输出以了解其进展情况将非常有用。有没有办法让 nohup 在脚本
假设我们定义了以下路由: const routes: Routes = [ { path: '', component: WelcomeComponent }, {
我正在尝试以下操作: a a > 1 1 > 2 2 > 3 3 我想要的是: a b > 1 1 > 2 2 > 3 3 有没有办法告诉 R 使用存储在对象( "b" )中的字符串( a
我想在安装二进制文件之前使用 automake 处理/修改它们。例如,我想将二进制文件中的符号提取到单独的文件和位置(如 this )。另一个示例是收集关键 Assets 的 md5sum 以发布报告
我的应用程序有一个主要的 pro 文件,我想告诉 qmake 在与应用程序同时编译一个单独的库。该库的目录中还有一个 pro 文件。这可能吗? 最佳答案 将 lib 和应用程序放在单独的子目录中,并使
我的 vimrc 中有以下内容: nnoremap :!screen -S foo -p run -X stuff '!!^M' 但是,当单击 F1 时,出现错误:没有上一个命令。 我想要的
我正在使用 Swagger 和 Scala 来记录我的 REST API。我想为 POST、PUT 和 DELETE 启用批量操作,并希望相同的路由接受单个对象或对象集合作为正文内容。 有没有办法告诉
我有一个 SAS 代码,它为我的计算创建了很多中间表。事情是,我在工作完成后并不真正关心这张 table ,我只关心决赛的结果。 但是,每次我运行这段代码时,SAS 都会添加所有生成的表来做我的流程,
有没有办法告诉 UglifyJS 跳过特定的代码部分,也许使用这样的注释: // uglifyjs:skipStart filter = function(item){ /* some crazy f
在 macOS 上通过 homebrew 安装包时,如果我的网络不稳定并且一次下载失败,homebrew 将下载源并从源开始构建。这将需要很长时间和高 CPU 使用率,这是不需要的。如何在下载失败时告
有没有办法告诉 GORM 不要保留属性?我计划在我的 User 类上定义一个确认密码属性,用于验证,但不应保留。 最佳答案 使用 transient 关键字 GORM 可以指示不持久化特定属性。 以下
我正在为 jQuery 编写一个幻灯片放映应用程序(单击按钮,然后滑动浏览图像列表),但我遇到了一个小错误,它将响应 即使在动画发生时也会发出 click() 请求。我已经在使用 animate()
我可以告诉 Xcode 4 我不在项目中使用自动布局吗? 目前,每个新创建的 xib 都会启用自动布局,这意味着我必须在创建 xib 后手动将其关闭,而我不希望这样。 最佳答案 这是自动布局的问题。您
因此,我正在使用目前手动运行的 AzCopy,但我要通过我们的一台服务器上的任务计划程序来运行它。如果我手动执行批处理文件,这会将文件从一个容器复制到另一个容器,并且可以完美运行。然而,它问我: Ov
我正在 OSX 中编写一个基于文档的应用程序。我发现当我更改文档的内容时,应用程序不知道文档已更改。我可以在没有警告的情况下关闭文档,这会导致我未保存的内容丢失。 如何告诉 NSDocument 文档
根据NSWindow Class Reference ,您应该“很少需要调用”NSWindow 方法“display”或“setViewsNeedDisplay”。那么重新显示窗口内容的常用方法是什么
为了重写开源 iMedia 框架项目(目前有数十名开发人员正在使用),我们正在切换到 IKImageBrowserView,并且在缓存方面遇到了麻烦。 看来 IKImageBrowserView 喜欢
我是一名优秀的程序员,十分优秀!