我致力于为多个应用程序实现IPv6支持,但我想知道这两个字段是什么.关于这一点的问题很少,所以我不确定我做对了.
sin6_scope_id) - 好吧,Q1,Q2,Q3和Q4给了我关于范围ID的想法,我想我明白了.所以,我将不得不再添加一个配置参数,以使scope-id可配置.(我决定在这里添加,以防有人对此感兴趣).短时间 - 范围ID是唯一确定哪个设备应该处理流量所必需的 - 因为可能有多个接口,具有相同的IP,但具有不同的(接口?)ID.到现在为止还挺好.sin6_flowinfo)
sin6_flowinfo(比如 - 几个值,如标志,这意味着什么),或者它就像sin6_scope_id- 可能是任何值,取决于设备,我正在尝试连接?0(就像在Beej的网络编程指南中一样.是的,我尝试过,它有效,但我不确定它是否只适用于这种情况(如果它取决于它)在某些网络配置上),或者如果设置为0?它将始终有效?google-ing"sin6_flowinfo"给出了结构定义和手册页,对这个领域没什么用处.任何有趣的来源?(可理解的一个......不是RFC:D)编辑:嗯,在@glglgl的回答和提示之后,这sin6_flowinfo可能已经过时了,我发现了一些有趣的资料来源: RFC:IPv6流标签规范, IETF草案:流标签作为传输层Nonce, solaris和维基百科的实用指南.
该字段不是过时的(或者我找不到这样的来源,这证实了这一点),但看起来0价值已经足够好了.
我在服务于http页面的远程服务器上的端口9100上运行了一个应用程序.在我进入服务器后,我可以卷曲localhost 9100并收到响应.
但是我无法使用浏览器访问同一个应用程序 http://ip:9100
我也无法从我的本地PC远程登录.我该如何调试?有没有办法跟踪特定的IP和端口组合,以查看它被阻止的位置?
任何Linux工具/命令/实用程序将不胜感激.
谢谢,穆尔塔扎
我有一个WPF应用程序,它使用SSLStream连接到服务器并发送/接收一些消息.我的代码更大程度上基于这个例子(SslTcpClient):https://msdn.microsoft.com/en-us/library/system.net.security.sslstream(v = vs.110).aspx .
这个工作好几个月了.但是,在获得此Windows更新(Windows 10版本1511和Windows Server 2016技术预览4的累积更新:2016年6月14日 - https://support.microsoft.com/en-us/kb/3163018)之后.我的应用开始报告此异常:
System.Security.Authentication.AuthenticationException: A call to SSPI failed, see inner exception. ---> System.ComponentModel.Win32Exception: The Local Security Authority cannot be contacted
--- End of inner exception stack trace ---
at System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, Exception exception)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, …Run Code Online (Sandbox Code Playgroud) 各种Windows版本都支持哪种SCTP?
请考虑以下事项:
您的ISP为您提供动态IP地址(例如123.123.123.123).
我的问题很简单(答案可能不是):
是否可以将带有外部源IP(例如124.124.124.124)的单个udp数据包发送到fixed-ip服务器?我不需要从服务器得到答案.我只是想知道是否/如何使用伪造的源IP地址完成这种单向通信.
服务器,没有其他人不应该能够找到真正的客户端IP.
我使用socket在linux中创建了一个聊天客户端,我希望完全破坏连接.以下是代码的相关部分:
int sock, connected, bytes_recieved , true = 1, pid;
char send_data [1024] , recv_data[1024];
struct sockaddr_in server_addr,client_addr;
int sin_size;
label:
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("Socket");
exit(1);
}
if (setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&true,sizeof(int)) == -1)
{
perror("Setsockopt");
exit(1);
}
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(3128);
server_addr.sin_addr.s_addr = INADDR_ANY;
bzero(&(server_addr.sin_zero),8);
if (bind(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr))== -1)
{
perror("Unable to bind");
exit(1);
}
if (listen(sock, 5) == -1)
{
perror("Listen");
exit(1);
}
printf("\nTCPServer Waiting for client on port …Run Code Online (Sandbox Code Playgroud) 我试图使用在Android中实现WebSocket客户端的类.但是我收到以下错误:
12-07 11:22:46.286 31579-31579/com.domain.wsocketchat W/System: ClassLoader referenced unknown path: /data/app/com.domain.wsocketchat-2/lib/arm
12-07 11:22:46.392 31579-31579/com.domain.wsocketchat W/System.err: an error occurred:java.net.SocketException: socket failed: EACCES (Permission denied)
Run Code Online (Sandbox Code Playgroud)
我正在使用的课程如下:
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.drafts.Draft;
import org.java_websocket.drafts.Draft_10;
import org.java_websocket.handshake.ServerHandshake;
import java.net.URI;
public class EmptyClient extends WebSocketClient {
public EmptyClient(URI serverUri, Draft draft) {
super(serverUri, draft);
}
public EmptyClient(URI serverURI) {
super(serverURI);
}
@Override
public void onOpen(ServerHandshake handshakedata) {
System.out.println("new connection opened");
}
@Override
public void onClose(int code, String reason, boolean remote) {
System.out.println("closed with exit code " + …Run Code Online (Sandbox Code Playgroud) 我需要找到一个解决方案,如何从WiFi网络中的其他设备获取MAC地址.有一个很好的方法如何为IPv4执行此操作(iOS应用程序如何获取MAC地址?),但如何为IPv6执行此操作?由于ARP被NDP(邻居发现协议)取代,后一种方法不起作用.如果有人能帮助我,我将不胜感激.
我正在使用PACKET_MMAP套接字选项在C中编写流量生成器来创建环形缓冲区以通过原始套接字发送数据.环形缓冲区充满了以太网帧以进行发送和sendto调用.环形缓冲区的全部内容通过套接字发送,这应该比在内存中具有缓冲区提供更高的性能,并且sendto对于需要发送的缓冲区中的每个帧重复调用.
当不使用PACKET_MMAP时,在调用单帧时,sendto从用户区内存中的缓冲区复制到内核内存中的SK buf,然后内核必须将数据包复制到NIC访问的内存中,并将NIC发送到DMA将帧放入其自己的硬件缓冲区并将其排队以进行传输.当使用PACKET_MMAP套接字选项时,mmapped内存由应用程序分配并链接到原始套接字.应用程序将数据包放入mmapped缓冲区,调用sendto而不是内核必须将数据包复制到SK buf中,它可以直接从mmapped缓冲区中读取它们.还可以从环形缓冲区而不是单独的分组/帧读取分组的"块".因此,性能提升是一个系统调用,用于复制多个帧,每个帧一次复制操作,以使其进入NIC硬件缓冲区.
当我将使用PACKET_MMAP的套接字的性能与"普通"套接字(其中包含单个数据包的char缓冲区)进行比较时,根本没有性能优势.为什么是这样?在Tx模式下使用PACKET_MMAP时,每个环形块只能放入一个帧(而不是像Rx模式那样每个环形块有多个帧)但是我创建了256个块,所以我们应该在一次sendto调用中发送256帧吗?
使用PACKET_MMAP进行性能main()调用packet_tx_mmap():
bensley@ubuntu-laptop:~/C/etherate10+$ sudo taskset -c 1 ./etherate_mt -I 1
Using inteface lo (1)
Running in Tx mode
1. Rx Gbps 0.00 (0) pps 0 Tx Gbps 17.65 (2206128128) pps 1457152
2. Rx Gbps 0.00 (0) pps 0 Tx Gbps 19.08 (2385579520) pps 1575680
3. Rx Gbps 0.00 (0) pps 0 Tx Gbps 19.28 (2409609728) pps 1591552
4. Rx Gbps 0.00 …Run Code Online (Sandbox Code Playgroud) 我正在发送非常大(64000字节)的数据报.我意识到MTU远小于64000字节(典型值大约是1500字节,来自我的阅读),但我怀疑会发生两件事之一 - 要么没有数据报就能通过(所有大于1500字节)会被静默删除或导致抛出错误/异常)或64000字节数据报将被分成大约43个1500字节的消息并透明地传输.
从长远来看(2000 + 64000字节数据报),数据报的大约1%(即使是LAN似乎异常高)也会被丢弃.我可能期望通过网络,数据报可能无序到达,被丢弃,过滤等等.但是,在localhost上运行时我没想到这一点.
是什么导致无法在本地发送/接收数据?我意识到UDP是不可靠的,但我没想到它在localhost上如此不可靠.我想知道它是否只是一个时间问题,因为发送和接收组件都在同一台机器上.
为了完整起见,我已经包含了发送/接收数据报的代码.
发送:
DatagramSocket socket = new DatagramSocket(senderPort);
int valueToSend = 0;
while (valueToSend < valuesToSend || valuesToSend == -1) {
byte[] intBytes = intToBytes(valueToSend);
byte[] buffer = new byte[bufferSize - 4];
//this makes sure that the data is put into an array of the size we want to send
byte[] bytesToSend = concatAll(intBytes, buffer);
System.out.println("Sending " + valueToSend + " as " + bytesToSend.length + " bytes");
DatagramPacket packet = new DatagramPacket(bytesToSend,
bufferSize, …Run Code Online (Sandbox Code Playgroud) c ×3
networking ×3
sockets ×3
ipv6 ×2
linux ×2
.net ×1
android ×1
c# ×1
ios ×1
ip-address ×1
java ×1
mac-address ×1
performance ×1
sctp ×1
sspi ×1
tvos ×1
ubuntu ×1
udp ×1
websocket ×1
windows ×1