标签: packet

通过PHP的解包函数读取Struct中的Struct

我想知道如何通过php的unpack函数读取结构中的结构.当我得到一个IS_MCI数据包时,我检查它的类型以确保它等于ISP_MCI,然后检查NumC以找出该数据包中有多少个CompCar结构.问题是尝试通过单个函数将这些内容解压缩到一个数组中.我总是得到一个未定义的偏移量.所以,我正在寻找一些新的眼睛.

你会如何处理这个数据包?

有问题的结构是这样的:

struct IS_MCI // Multi Car Info - if more than 8 in race then more than one of these is sent
{
    byte    Size;       // 4 + NumC * 28
    byte    Type;       // ISP_MCI
    byte    ReqI;       // 0 unless this is a reply to an TINY_MCI request
    byte    NumC;       // number of valid CompCar structs in this packet

    CompCar Info[8];    // car info for each player, 1 to 8 of these (NumC)
};

struct CompCar …
Run Code Online (Sandbox Code Playgroud)

php struct variable-length packet

6
推荐指数
1
解决办法
1893
查看次数

Scapy SYN发送我们自己的IP地址

我尝试在我的本地网络上发送SYN数据包并使用Wireshark监控它们,一切正常,除非我尝试将数据包发送到我自己的IP地址,它似乎"工作",因为它说发送1数据包,但它是没有真正发送,我看不到Wireshark中的数据包,也没有任何数据包的答案.我的设置是计算机A(192.168.0.1),其中TCP套接字服务器侦听端口40508,计算机B(192.168.0.2).

在计算机B上我测试:

ip=IP(src="192.168.0.2",dst="192.168.0.1")  
SYN=TCP(sport=40508,dport=40508,flags="S",seq=12345)
send(ip/SYN)
Run Code Online (Sandbox Code Playgroud)

它工作正常,我看到Wireshark上的SYN数据包和192.168.0.1的SYN/ACK响应

在计算机A我测试:

ip=IP(src="192.168.0.1",dst="192.168.0.2")  
SYN=TCP(sport=40508,dport=40508,flags="S",seq=12345)
send(ip/SYN)
Run Code Online (Sandbox Code Playgroud)

它工作正常,我看到SYN数据包和RST/ACK(没有服务器侦听192.168.0.2上的端口40508,因此它发送RST/ACK)响应来自192.168.0.2

但是当我尝试使用计算机A:

ip=IP(src="192.168.0.2",dst="192.168.0.1")  
SYN=TCP(sport=40508,dport=40508,flags="S",seq=12345)
send(ip/SYN)
Run Code Online (Sandbox Code Playgroud)

Wireshark中没有任何内容,好像数据包从未发送过,但它像其他测试一样说:发送1个数据包.并且没有任何错误返回.如果我在计算机B上运行相同的测试并尝试将数据包发送到自己的IP地址,我遇到了同样的问题.

对于我的程序,我真的需要将SYN数据包发送到我自己的IP地址,有没有办法做到这一点还是不可能?

提前致谢,

Nolhian

python generator scapy send packet

6
推荐指数
1
解决办法
8646
查看次数

以UTF-8嗅探和显示TCP数据包

我正在尝试使用tcpdump来显示在我的网络上流动的tcp数据包的内容.我有类似的东西:

tcpdump -i wlan0 -l -A
Run Code Online (Sandbox Code Playgroud)

-A选项将内容显示为ASCII文本,但我的文本似乎是UTF-8.有没有办法使用tcpdump正确显示UTF-8?你知道其他任何有用的工具吗?

非常感谢

tcp sniffing utf-8 tcpdump packet

6
推荐指数
1
解决办法
7276
查看次数

在C#中发送原始IP数据包,以太网层之上的所有内容

我不想修改帧的以太网部分,但我需要修改IP数据包和帧的数据部分.

我尝试发送一个原始帧,它仍然输入IP信息.我基本上需要发送一个帧而不定义端点,除了我发送的位.

这是我得到的:

Socket s = new Socket(AddressFamily.Unspecified, SocketType.Raw, ProtocolType.Raw);
EndPoint ep = new IPEndPoint(IPAddress.Parse("205.188.100.58"),80);
s.SendTo(GetBytes(""),ep); //im sending nothing, so i expect the frame to just have ethernet stuff
s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, false);
Run Code Online (Sandbox Code Playgroud)

我的问题: 使用SendTo添加帧的IP部分,我不希望这样,因为我想欺骗源IP.使用"发送"将崩溃,因为它说我需要指定一个端点.有关该怎么办的任何建议?我只是想发送一个数据包并自己定义IP部分和数据部分.

注意:不,我没有进行DOS攻击,我需要这个才能合法使用!

我知道如何定义IP部分,它只是在没有生成IP部分的情况下实际发送数据.

c# ip packet spoofing

6
推荐指数
1
解决办法
1万
查看次数

Java多播发送数据,未接收

我正在用Java编写一个类,用于大大简化多播过程.但是,我遇到了两个大问题:

  1. 该类发送数据(我可以使用我的网络监视器Wireshark验证这一点),但同一组中的任何其他人都不会收到数据.
  2. 在某些机器上,传输过程中超出了发送数据包TTL(同样,根据Wireshark).

有人可以帮帮我吗?我一直在努力寻找几小时的答案,看来我的代码遵循了从多播主机连接,加入,发送和接收数据的所有基本过程.

以下是该课程相关部分的片段:

Multicaster类:

public class Multicaster {
  public int port = 5540;

  protected String IPAddress;

  private MulticastSocket msConn;
  private InetAddress netAddr;

  public Multicaster(String IPAddress) {
    this.IPAddress = IPAddress;
  }

  public String recieveData() {
    byte[] buf = new byte[1000];
    DatagramPacket pack = new DatagramPacket(buf, buf.length);

    try {
      this.msConn.receive(pack);
      new Message(pack);
      String out = new String(pack.getData());
      return out.substring(0, pack.getLength());
    } catch (IOException e) {
      return new String("");
    }
  }

  public void joinGroup() { 
    try {
      this.msConn.joinGroup(this.netAddr);
    } catch (IOException …
Run Code Online (Sandbox Code Playgroud)

java lan multicast send packet

6
推荐指数
1
解决办法
5716
查看次数

如何捕获IP数据包,更改其内容并在Linux上重新发送?

我的问题是:

如何从网络接口捕获传入的IP数据包,更改其内容并从另一个网络接口重新发送?

linux ip packet

6
推荐指数
1
解决办法
2122
查看次数

是否可以在同一端口上仅使用1个UDPSocket进行发送/接收?

我正在尝试发送一个DatagramPacket,然后必须等待来自服务器的Acknowlegment,以便我知道是否必须重新发送相同的数据包或发送下一个数据包.

我在客户端使用相同的套接字,发送数据包并接收确认(ack),在服务器端使用相同的,另一个套接字用于接收数据包,然后将确认发送给客户..

第一个问题是客户端正在发送数据包,服务器正在接收它,然后将确认发送给客户端,但客户端在接收确认数据包时阻塞.

我正在制作一些System.out.println以确定问题所在,但我无法找到解决此问题的方法.

第二个问题是服务器仍然总是接收数据,并且不要等待客户端发送内容,我检查了因为我得到了那些行(例如"得到长度为xxx的数据包""ack与ackNr yyy一起发送"... "虽然客户端在发送第一个数据包后仍在阻塞,但始终打印在服务器端,因为它正在等待未收到的确认!

这是CLIENT的代码:

package blatt7;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketTimeoutException;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import java.util.zip.CRC32;




public class FileSender { 


String zielRechner;
String filePath;
InetAddress host;
File file;
FileInputStream fis;
int readLength;
int sequenceNr = 0;
int receivedSeqNr = 1;
static int port = 7777;
int packetNr = 0;
byte[] packet = new byte[1216];
byte[] data = new byte[1200];
byte[] header = new byte[16]; …
Run Code Online (Sandbox Code Playgroud)

java networking udp datagram packet

6
推荐指数
1
解决办法
6592
查看次数

使用TCP套接字发送/接收数据包

最近,我设法在我的PC和Raspberry Pi上创建套接字,以实现两个设备之间的通信.目前,客户端能够自动向服务器发送消息.我想知道,如果有可能修改脚本来发送tcp数据包而不是纯文本消息,因为我非常希望将来使用我的PC来控制覆盆子pi,而不需要ssh/etc.

我看了一些例子,但由于我在编写自己的脚本/代码方面没有太多经验,所以我不太清楚如何去做.如果有人可以通过解释和一些例子(如果可能的话)指导我正确的方向,我将不胜感激.

无论如何这里是我正在运行的服务器/客户端脚本:

客户:

import socket   
import sys  
import struct
import time

#main function
if __name__ == "__main__":

    if(len(sys.argv) < 2) :
        print 'Usage : python client.py hostname'
        sys.exit()

    host = sys.argv[1]
    port = 8888

#create an INET, STREAMing socket
try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error:
    print 'Failed to create socket'
    sys.exit()

print 'Socket Created'

try:
    remote_ip = socket.gethostbyname( host )
    s.connect((host, port))

except socket.gaierror:
    print 'Hostname could not be resolved. Exiting'
    sys.exit()

print 'Socket Connected to ' …
Run Code Online (Sandbox Code Playgroud)

python sockets tcp client-server packet

6
推荐指数
2
解决办法
5万
查看次数

UDP-可选校验和

根据我对UDP的了解,它没有错误处理,没有检查发送/接收的数据序列,没有检查重复的数据包,没有检查损坏的数据包以及显然不能保证已接收发送的数据包。 。

因此,考虑到这一点,为什么实际上在UDP中存在使用校验和的选项?因为可以肯定的是,如果您要确保以正确的顺序接收发送的数据(而不损坏等),则可以使用TCP ...

谢谢你的时间 :)

error-handling checksum udp tcp packet

6
推荐指数
1
解决办法
3739
查看次数

Scapy:使用PacketListField解析数据包中包含的多个数据包

我正在尝试剖析数据包,它封装了另一个类似于数据包的结构,称为"标记".结构看起来像这样

+---------+
|Ether    |
+---------+
|IP       |                   a tag
+---------+
|UDP      |                +------------+
+---------+                |tagNumber   |
|BVLC     |                +------------+
+---------+                |tagClass    |
|NPDU     |                +------------+
+---------+           +-+  |LVT field   |
|APDU     |           |    +------------+
|  +------+--+        |    |            |
|  |Tag 1    | <------+    |  data      |
|  +---------+             |            |
|  |Tag 2    |             +------------+
|  +---------+
|  |Tag n    |
+------------+
Run Code Online (Sandbox Code Playgroud)

为此,我创建了一个派生自现有的类PacketListField,如下所示:

class TagListField(PacketListField):
    def __init__(self):
        PacketListField.__init__(
            self,
            "tags",
            [],
            guessBACNetTagClass,
Run Code Online (Sandbox Code Playgroud)

引用guessBACNetTagClass的函数返回解析标记所需的正确类.

BACNetTagClasses = …
Run Code Online (Sandbox Code Playgroud)

python scapy packet bacnet

6
推荐指数
1
解决办法
1151
查看次数