Articles of 编程

广播UDP数据包到255.255.255.255

第一次海报,希望这是一个容易的: 我需要将广播数据包发送到一个硬件,当它通电时,它与我的机器位于不同的子网上,以便告诉它把IP地址重置为我networking上的IP地址。 但是,除非我使用DHCP,否则我似乎无法通过自己的子网进行广播,而最终我无法做到这一点。 networking上没有路由器,只是简单地在我的机器和我正在试图交谈的盒子之间切换,另外还有一些networking上的其他Linux机器。 所以基本上这个例子代码在testing环境(在我有DHCP启用的一个更大的networking上)在Fedora 19上工作,直到我尝试静态设置我的IP地址: int main(int argc, char *argv[]) { int sock; if( (sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) { perror("socket : "); return -1; } int broadcast = 1; if( setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &broadcast, sizeof(broadcast)) != 0 ) { perror("setsockopt : "); close(sock); return -1; } char *ip = "255.255.255.255"; char […]

以编程方式获取networking链接types和速度

我不知道是否有一个更紧凑的方法来find链接速度和Linux中的networking接口的types(无线,以太网),而不是打开并读取/sys/class/net/eth0/type和/sys/class/net/eth0/speed文件。 如果没有,谁能告诉我在哪里可以find/sys/class/net/eth0/type返回的数字,在哪种networkingtypes对应? 编辑:它变得更糟! 经过一些无线的实验, /sys/class/net/wlan0/type也返回1,而/sys/class/net/wlan0/speed不存在,我必须从/sys/class/net/wlan0/wireless/link有时会返回不正确的速度。 例如在54Mbits卡中有时会返回55。 提前致谢!

什么是接口标识符

笔记本电脑使用一个或多个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的物理地址?