Wireshark没有捕获https数据包.我尝试过滤它们portmap.port == 443但没有显示https数据包,但是,http数据包捕获得很好.
有什么建议?
如何使用 tcpdump 捕获流量并仅以原始二进制格式保存完整的有效负载(应用程序层数据,无 tcp/ip 标头)?
我有一个带有两个物理接口的 linux 系统。我需要通过一个接口拦截(读取)传入的数据包,读取(或处理)数据并按原样通过另一个接口将其发送出去 - 就像中间人一样。我能够从数据包中提取所有标头字段和有效载荷数据,但我无法再次将其放回线路上。如何在通过另一个接口的途中发送数据包?
// All #includes
struct sockaddr_in source,dest;
int i,j,k;
int main()
{
int saddr_size , data_size;
struct sockaddr_in saddr;
unsigned char *buffer=malloc(65535);
int sock_raw = socket( AF_PACKET , SOCK_RAW , htons(ETH_P_ALL)) ;
if(sock_raw < 0)
perror("setsockopt");
setsockopt(sock_raw , SOL_SOCKET , SO_BINDTODEVICE , "eth0" , strlen("eth0")+ 1 );
if(sock_raw < 0)
{
perror("Socket Error");
return 1;
}
while(1)
{
saddr_size = sizeof (struct sockaddr);
//Receive a packet
data_size = recvfrom(sock_raw , buffer , 65536 , 0 ,(struct …Run Code Online (Sandbox Code Playgroud) 我正在使用rawcap tcp 捕获工具来捕获 Windows 上的本地主机数据包。
我有一条巨大的溪流,有多个
'捕获文件中缺少 XXXX 字节'
在捕获的文件中。
我怎样才能防止这种情况?如何从本地主机捕获完整的 TCP 数据包?
有没有其他我可以使用的工具?
谢谢
我想使用 androidVpnService来捕获数据包并根据 IP 地址过滤它们。我可以很好地从“tun”接口获取数据包,但之后我不确定如何将它们转发到原始目的地。根据这个答案的评论,我似乎只需要:
我尝试像这样发送数据:
Socket socket = new Socket();
socket.bind(new InetSocketAddress(0));
if (protect(socket)){
Log.e(TAG, "Socket protected");
}else{
Log.e(TAG, "Socket NOT protected");
}
socket.connect(new InetSocketAddress(ipPacket.getDestinationIp(), ipPacket.getDstPort()));
Log.e(TAG, "Socket connected: " + socket.isConnected());
socket.getOutputStream().write(getTCPHeader(getIpHeader(packet)[1])[1].array());
Run Code Online (Sandbox Code Playgroud)
getTCPHeader(ByteArray packet)这些方法getIpHeader(ByteArray packet)简单地将数据包分成两个,ByteArray如下所示:
private ByteBuffer[] getIpHeader(ByteBuffer packet){
packet.position(0);
ByteBuffer ipHeader = ByteBuffer.allocate(20);
ByteBuffer data = ByteBuffer.allocate(packet.limit() - 20);
packet.get(ipHeader.array(), 0, 20);
packet.get(data.array(), 0, packet.limit() - 20); …Run Code Online (Sandbox Code Playgroud) 19:25:47.629351 IP 2.2.2.2.80 > 1.1.1.1.31889: Flags [.], seq 2372487272:2372492544, ack 2808407165, win 122, options [nop,nop,TS val 911640439 ecr 235835291], length 5272
19:25:47.631626 IP 1.1.1.1.31889 > 2.2.2.2.80: Flags [.], ack 2372480682, win 3876, options [nop,nop,TS val 235835291 ecr 911640428], length 0
19:25:47.631638 IP 1.1.1.1.31889 > 2.2.2.2.80: Flags [.], ack 2372483318, win 3793, options [nop,nop,TS val 235835291 ecr 911640428], length 0
19:25:47.631677 IP 1.1.1.1.31889 > 2.2.2.2.80: Flags [.], ack 2372483318, win 4096, options [nop,nop,TS val 235835292 ecr 911640428], length 0
19:25:47.674712 IP …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用来自两个应用程序的端口,并让每个应用程序从一组不同的IP地址接收数据包.为了实现这一点,我使用了SO_REUSEPORT和SO_ATTACH_REUSEPORT_CBPF套接字选项.我的代码如下:
parentfd = socket(AF_INET, SOCK_STREAM, 0);
if (parentfd < 0)
error( "ERROR opening socket");
struct sock_filter code[]={
{ 0x28, 0, 0, 0x0000000c },
{ 0x15, 0, 3, 0x00000800 },
{ 0x20, 0, 0, 0x0000001a },
{ 0x15, 2, 0, 0xc0a8ff01 },
{ 0x6, 0, 0, 0x00000000 },
{ 0x6, 0, 0, 0x00040000 },
{ 0x6, 0, 0, 0x00000001 },
};
struct sock_fprog bpf = {
.len = ARRAY_SIZE(code),
.filter = code,
};
if (setsockopt(parentfd, SOL_SOCKET, SO_REUSEPORT, (const void *)&optval,sizeof(optval)))
error("ERROR …Run Code Online (Sandbox Code Playgroud) 是否可以在 Windows docker 容器内捕获 tcp 数据包?(使用最终基于microsoft/windowsservercore的图像)
netsh trace start失败了The inbox capture driver could not be started (error=0x800106d9)
New-NetEventSession -CaptureMode SaveToFile -Name cat -LocalFilePath c:\cat.etl失败了A general error occurred that is not covered by a more specific error code
(上下文 - 我正在尝试调试网络问题,在一段时间后,dockerized 应用程序似乎停止通过已建立的连接接收数据。我可以在 docker 主机上运行跟踪并查看转发到容器的数据;我希望能够在容器内执行相同的操作,看看它是否也出现在那里)
我正在使用内置的 NDIS 捕获服务在 Windows 上执行多层数据包捕获,以确定应用程序的堆栈数据包被丢弃的位置。在 Microsoft Message Analyzer 中查看生成的 ETL 文件时,我获得了包含两个项目的数据点,特别是我正在寻找的项目:
我还没有找到一种方法来收集 lowerIfIndex 引用的特定层/过滤器。我发现这篇文章引导我找到 WMI 类,MSNdis_EnumerateReceiveFilters我希望该类能够提供类似于 Get-NetAdapter 的输出,列出过滤器的逻辑名称以及相应的 ID。当我尝试以类似于 MSDN 文章引用的格式运行命令时,我总是收到“参数不正确”停止错误。
另一条命令Get-NetAdapterBinding似乎显示 NDIS 过滤器/层的逻辑名称,但没有相应的 ID。
有人知道将 lowerIfIndex 与过滤器名称关联起来的方法吗?
我正在尝试将 tshark 与一些标志一起使用,并获取每个过滤跟踪的时间戳。我用它来过滤系统中的所有 DNS 查询。\n我无法在过滤器工作的情况下获取时间戳。例如,如果我尝试类似的事情
\n\ntshark -t ad -n -T fields -e ip.src -e dns.qry.name -f \'dst port 53\' -Y "dns.flags.response eq 0"\nRun Code Online (Sandbox Code Playgroud)\n\n我得到了我想要的输出
\n\n192.168.1.3 clientservices.googleapis.com\n192.168.1.3 play.google.com\n192.168.1.3 play.google.com\nRun Code Online (Sandbox Code Playgroud)\n\n我得到时间戳
\n\n tshark -t ad \n 1 2018-09-02 21:12:20.536204429 61.223.125.209 \xe2\x86\x92 192.168.1.3 UDP 174 12929 \xe2\x86\x92 51465 Len=132\n 2 2018-09-02 21:12:20.536355008 192.168.1.3 \xe2\x86\x92 61.223.125.209 UDP 126 51465 \xe2\x86\x92 12929 Len=84\n 3 2018-09-02 21:12:20.599264715 192.168.1.3 \xe2\x86\x92 176.31.225.118 TCP 54 45942 \xe2\x86\x92 80 [FIN, ACK] Seq=1 Ack=1 Win=30016 Len=0\nRun Code Online (Sandbox Code Playgroud)\n\n … packet-capture ×10
tcp ×4
networking ×3
sockets ×3
tcpdump ×2
android ×1
binary ×1
c ×1
docker ×1
https ×1
java ×1
linux ×1
ndis ×1
packet-loss ×1
powershell ×1
tshark ×1
windows ×1
wireshark ×1