Tag: 网络

IP标志的Do not Fragment Bit在哪里使用?

我很想知道在哪里使用IP Flags的“Do not Fragment”[DF]位。 由于碎片对于更高层而言是不可见的,并且它们也不关心。 我也在寻找一个例子。 非常感谢提前。

获取路由器范围内的设备的MAC地址

路由器是否可以获取未连接到它的附近设备的MAC地址? 我想编写一个应用程序,当某个特定的MAC地址进入我所拥有的路由器范围内时,会以某种方式通知我(电子邮件或其他东西)(该应用程序比这更具体,因此我不能使用预构建的工具但是如果它们是开源的他们可以帮忙)。 路由器将连接到互联网,设备是一个iPhone,所以它一直在寻找WiFi接入点,所以我觉得所有的成分都在那里,但我不知道我问的是否可能。 如果可能(即使只是通过重写路由器操作系统)将采取什么措施? C和我希望的水平一样低……

跟踪数据包通过内核(linux)

我有两台机器设置为使用Ip-Security和机器A(让我们称之为A和B)有一个套接字,它绑定到本地机器上的特定UDP端口,并经常轮询它以查看是否有任何接收在上面。 当我禁用Ip-security时,两台机器之间的数据运行良好,我发送和接收数据包很好。 但是当启用Ip-Security时,数据包不会到达机器B发送的机器A上的那个套接字。 我在这两台机器上都做了一个tcpdump ,我可以看到(加密的)数据包从机器B发出并在机器A上接收。但是之后,数据包进入内核,在某个地方要么解密数据包,要么在某个其他阶段,数据包被丢弃。 我希望能够在数据包通过内核时跟踪数据包并查看它被丢弃的位置。 是否有一些/proc可以用于此目的? 我能想到的另一种方法是在整个内核中插入调试语句并重新编译它,然后再次尝试发送数据包并进行调试。 感谢和抱歉长信息,但这是必要的。

C socket API是线程安全的吗?

我正在使用Linux和Win32套接字API。 在我的程序中,多个线程共享套接字句柄。 特别是,多个线程使用共享套接字句柄(即,相同的端口)调用send 。 在这种情况下,我是否必须锁定线程安全? 我无法找到答案。 我可以做一个测试,但想听听你的经历。 编辑 :我知道通过套接字发送数据根本不是primefaces操作。 当然,我们必须使用互斥锁来保证线程安全。 但是,我想知道系统API是否可以拥有自己的内部锁。 如果是这样,我们可以省略自己的锁定。 这个问题也可能适用于fprintffunction。 我想知道这样的系统API会有自己的锁。 根据我的经验,从多个线程调用fprintf并没有杀死我的程序,虽然文件或stdout上有比赛(即输出不一致或不可预测,但程序没有崩溃),这暗示fprintf有一个锁来保护他们的内部数据结构。

netdb.h没有正确链接

我正在尝试编译这个程序,如第19页的Beej网络编程指南中所述 。 #include #include #include #include int main() { int status; struct addrinfo hints; struct addrinfo *servinfo; /* Will point to the results */ memset(&hints, 0, sizeof hints); /* Make sure the struct is empty */ hints.ai_family = AF_UNSPEC; /* Don’t care IPv4 or IPv6 */ hints.ai_socktype = SOCK_STREAM; hints.ai_flags = AI_PASSIVE; if ((status = […]

getsockname总是返回0.0.0.0?

这是代码。 它与此类似问题的代码相同: http : //monkey.org/freebsd/archive/freebsd-stable/200401/msg00032.html 。 当我运行它时,我总是得到输出: 听取0.0.0.0:54493或其他什么。 显然端口发生了变化,但我不知道为什么我一直在获得0.0.0.0的IP地址。 我错过了什么吗? #include #include #include #include #include #include #include int main() { int sock; int len = sizeof(struct sockaddr); struct sockaddr_in addr, foo; if((sock=socket(AF_INET, SOCK_STREAM, 0))<0) { exit(0); } memset(&addr, 0, sizeof(struct sockaddr_in)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = INADDR_ANY; addr.sin_port = htons(0); if(bind(sock, (struct sockaddr *) &addr, […]

获取C中LAN上的设备列表

我想获得一个连接到我的本地网络的可用设备列表(它们的IP地址或主机名应该没问题)。 我在C#中有一些例子,但我找不到任何使用C / C ++的示例。 我很熟悉BSD套接字API,只是为了澄清。 我有一个“存根”的想法:也许我应该确定我的LAN上的设备可能属于的IP地址的范围,然后确定它们是否例如响应PING或类似的东西。 我怎么能实现这些? 我希望我的应用程序在Linux和iOS上运行。 这就是为什么我更喜欢BSD套接字,或者最喜欢的是Foundation / GNUstep(尽管它们是用Objective-C编写的)。

哪些绿色线程库可用于C,可以匹配Haskell绿色线程的性能和易用性?

在Haskell中编程时,我习惯于依赖GHC的forkIO来实现可移植的轻量级线程。 什么是C的等效库,可以提供相同的可扩展性和易用性? 具体来说,我需要C等价物至少以下两个function。 forkIO :: IO () -> IO ThreadId killThread :: ThreadId -> IO () 我假设我的应用程序,如果线程只打开阻塞操作而不是被强制挂起就足够了,因为所有线程都经常阻塞网络IO而我只使用splice系统调用来要求Linux内核在套接字之间推送数据。 更新 本文比较了数字和表格 GNU Pth Protothreads PM2包裹 结果有利于Protothreads。 由于我没有使用任何其他图书馆,我很乐意听到任何使用/开发此类图书馆的人。

从套接字C HTTP读取

我想知道如何判断是否已从套接字接收到所有数据。 这是一个简单的Web代理,现在我正在处理请求部分,所以发送的内容应该以’\ r \ n \ n \ n \ n’终止。我不知道请求会有多长。 我在这里读了一些post说我应该检查读取函数返回的0? 但其他说0的人只有在客户关闭连接时才会返回? 否则我可以检查缓冲区的最后一个字符,看看它们是否与上面的字符匹配? 计划只是将读取的数据加载到缓冲区中,如果有更多的数据重复,则保存该数据。 谢谢

通过C套接字发送原始二进制数据?

我正在努力通过C中的套接字发送加密数据。一切正常,直到我意识到发送的数据的大小比它应该的大得多。 下面的代码描述了这种情况: #include #include #include int main() { char temp[100], buffer[100]; int n = 1234567890; sprintf(temp, “%d”, n); printf(“Original n has size: %d\n”, sizeof(n)); // 4 printf(“Buffer size: %d\n”, strlen(temp)); //10 printf(“Buffer: %s”, temp); } 问题是原始数字存储为4字节整数,而缓冲区是逐字符存储的,因此通过套接字发送的不是4个字节,而是一个字节字符的10s。 我想知道有没有办法将二进制数据作为原始数据发送?