Articles of 编程

什么是接口标识符

笔记本电脑使用一个或多个networking适配器连接到组织的networking。 我正在尝试编写一个工具来持续监视每个networking的连接状态和连接质量。 然而,我的networking知识受限制和术语混淆了我。 具体查找所有networking适配器。 有人build议我使用ifconfig命令,它给了我所谓的“接口标识符”。 例如: ['lo0', 'gif0', 'stf0', 'en0', 'en1', 'en2', 'bridge0', 'p2p0'] 我不太清楚这是如何帮助我解决我的问题,因为我不知道接口标识符是什么,我不知道如何利用这些信息。 我的假设是,他们代表一台计算机或networking中的路由器。 如果有人能够澄清这一点,或以通俗的话来向我解释,这将是非常有帮助的。

如何计算TCP校验和

我正在写一个内核模块,它使用Netfilter钩子来修改一些TCP头信息,显然,在发送之前,我想重新计算校验和。 我也在接收端编辑标题,所以我也需要重新计算。 在网上search,我发现有些人说我可以简单地把它设置为0,它会为我计算,显然这是行不通的。 我也find了这个function tcp_v4_send_check(struct sock *sk, struct sk_buff *skb); 虽然没有人解释这是如何使用的,以及我是否可以在接收/发送方式中实际使用它。 我自己的尝试是将校验和设置为0,然后调用这个函数传递我有的skb和我有的skb-> sk,仍然没有。 那么请问,什么是直接计算TCP数据报校验和的方法?

如何在Java上支持IPv4和IPv6

我们的一个Java程序启动时,它只能监听IPv6(8080) 例如 # netstat -ntpl Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN – tcp6 0 0 :::8080 :::* LISTEN – tcp6 0 0 :::22 :::* LISTEN – 问题是不能从外部访问(localhost除外),解决这个问题,我有这个手动添加 -Djava.net.preferIPv4Stack=true 但是这使得这个程序只能用于IPv4networking。 是否有可能像上面的sshd一样,都支持IPv4和IPv6?

“零复制networking”与“内核旁路”?

“零复制networking”和“内核旁路”有什么区别? 他们是两个词组是相同的还是不同的? 内核是否绕过“零复制networking”中使用的技术,这是关系?

如何在不查询内核的情况下监控C程序中的NIC状态(up / down)?

现在我需要实时获取NIC的状态(向上或向下)。 这意味着当NIC在阻塞的循环中上下移动时,我必须捕获内核中断。 我的第一个愚蠢的方法是检查/ sys / class / net / eth0 / operstate或使用ioctl在循环中每隔100ms获取ifflag。 但100ms太长的应用程序重新路由stream量,每100ms轮询内核也不是好主意。 一旦我注意到可以在块模式下监视文件的inotify函数。 但不幸的是,它不能监视/ sys / class / net / eth0 / operstate文件,因为/ sys位于不在磁盘中的RAM中。 那么,除了编写一个内核模块来捕捉C程序中的NIC中断(up / down)以外,还有其他方法吗?

如何将原始套接字绑定到特定的接口

我的应用程序在CentOS 5.5上运行。 我正在使用原始套接字发送数据: sd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW); if (sd < 0) { // Error } const int opt_on = 1; rc = setsockopt(m_SocketDescriptor, IPPROTO_IP, IP_HDRINCL, &opt_on, sizeof(opt_on)); if (rc < 0) { close(sd); // Error } struct sockaddr_in sin; memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_addr.s_addr = my_ip_address; if (sendto(m_SocketDescriptor, DataBuffer, (size_t)TotalSize, 0, (struct […]

WSAGetLastError()只是GetLastError()的别名吗?

在我的代码中,我有I / O完成端口的asynchronousI / O,对于读/写完成callback,我得到一个HANDLE(当然可以是套接字,文件句柄,命名pipe道等等)。 所以如果在这样的例程中出现错误,我想检查错误,但是如何知道它是一个“networking”HANDLE [一个SOCKET,所以我应该调用WSAGetLastError()]或者一个“非networking”HANDLE [命名pipe道,文件等等,所以我应该调用GetLastError()]? 我为此使用了一个简单的标志,但是它的丑陋和不方便。 如果有人可以确认WSAGetLastError()只是GetLastError()的别名,我将只使用后者。 看起来如此: http://www.tech-archive.net/Archive/Development/microsoft.public.win32.programmer.networks/2007-08/msg00034.html http://us.generation-nt.com/wsagetlasterror-just-an-alias-getlasterror-help-28256642.html 但有人可以证实吗? MSDN在这个话题上不是很清楚。 和:使用GetLastError()而不是WSAGetLastError()是安全的? 我的意思是,如果WSAGetLastError()甚至是自Windows95作为别人声称的GetLastError()的别名,我可以假设它对于下一个版本的Windows将是真实的 – 但是我们不能在假设东西时编写好的代码:)

arp -a和路由打印

我需要编写一个显示这些信息的程序: netstat的 TCP / UDP连接 有关IP ipconfig / all的信息 ARP-A 路线打印 我已经有了其中的大部分,但是我在route print和arp -a遇到了问题。 我不想使用Process.Start()执行这个命令,因为它看起来不太壮观: Process p = new Process (); p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; p.StartInfo.UseShellExecute = false; p.StartInfo.FileName = "route"; p.StartInfo.Arguments = "PRINT"; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.CreateNoWindow = true; p.StartInfo.StandardOutputEncoding = Encoding.Default; p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; p.Start(); TextBox1.Text = p.StandardOutput.ReadToEnd(); 我想使用foreach循环来获取数据到ListView或DataGrid列。 有没有人能够帮助我? 我怎样才能得到这个数据到每个列:目的地,networking掩码,网关,接口,指标和永久路由? 而在ARP的情况下,Internet地址types的物理地址?