如何找到传输中数据包的最后一个中继节点?

时间:2019-05-21 12:29:52

标签: iot contiki

我正在尝试在RPL中实现安全机制。为此,我需要记录数据包的来源。例如,如果一个数据包是从A-> B-> C-> D发送的,我想在C处找到该数据包是通过B来的,对于D也是类似的。

我在+ registry=hortonworks + name=sandbox-hdp + version=3.0.1 + proxyName=sandbox-proxy + proxyVersion=1.0 + flavor=hdp + echo hdp + mkdir -p sandbox/proxy/conf.d + mkdir -p sandbox/proxy/conf.stream.d + docker pull hortonworks/sandbox-hdp:3.0.1 3.0.1: Pulling from hortonworks/sandbox-hdp 70799bbf2226: Pull complete 40963917cdad: Pull complete 3fe9adbb8d7e: Pull complete ee3ec4e8cb3d: Pull complete 7ea5917732c0: Pull complete 2d951411620c: Pull complete f4c5e354e7fd: Pull complete 22ffa6ef360f: Pull complete 2060aa0f3751: Pull complete ca01ba34744d: Pull complete 83326dded077: Pull complete eb3d71b90b73: Pull complete bdd1cab41c81: Pull complete 500cc770c4bd: Pull complete 0cb1decd5474: Pull complete b9591f4b6855: Pull complete f28e56086127: Pull complete e7de4e7d0bca: Pull complete ec77967d2166: Pull complete 4fdcae170114: Pull complete 6347f5df8ffc: Pull complete 6a6ecc232709: Pull complete ea845898ff50: Pull complete 02135573b1bf: Pull complete cb0176867cd8: Pull complete 3c08321268fd: Pull complete 82e82a97c465: Pull complete 8aaaa48ed101: Pull complete 74b321ac2ac5: Pull complete 569da02c0a66: Pull complete af40820407ef: Pull complete Digest: sha256:7b767af7b42030fb1dd0f672b801199241e6bef1258e3ce57361edb779d95921 Status: Downloaded newer image for hortonworks/sandbox-hdp:3.0.1 + docker pull hortonworks/sandbox-proxy:1.0 1.0: Pulling from hortonworks/sandbox-proxy Digest: sha256:42e4cfbcbb76af07e5d8f47a183a0d4105e65a1e7ef39fe37ab746e8b2523e9e Status: Image is up to date for hortonworks/sandbox-proxy:1.0 + '[' hdp == hdf ']' + '[' hdp == hdp ']' + hostname=sandbox-hdp.hortonworks.com ++ docker images ++ grep hortonworks/sandbox-hdp ++ awk '{print $2}' + version=3.0.1 + docker network create cda + docker run --privileged --name sandbox-hdp -h sandbox- hdp.hortonworks.com --network=cda --network-alias=sandbox- hdp.hortonworks.com -d hortonworks/sandbox-hdp:3.0.1 1eb02f20456a5be1d553bb7dc67e1db1203edfcc8b54d8a0bc3c5e0850a5e079 + echo ' Remove existing postgres run files. Please wait' Remove existing postgres run files. Please wait + sleep 2 + docker exec -t sandbox-hdp sh -c 'rm -rf /var/run/postgresql/*; systemctl restart postgresql-9.6.service;' + sed s/sandbox-hdp-security/sandbox-hdp/g assets/generate-proxy- deploy-script.sh + mv -f assets/generate-proxy-deploy-script.sh.new assets/generate- proxy-deploy-script.sh + chmod +x assets/generate-proxy-deploy-script.sh + assets/generate-proxy-deploy-script.sh + uname + grep MINGW + chmod +x sandbox/proxy/proxy-deploy.sh + sandbox/proxy/proxy-deploy.sh docker: invalid reference format. See 'docker run --help'. 文件中添加了一些代码,以从数据包缓冲区中提取发件人地址,但该地址始终为空。

我正在存储最后一个节点地址和接收到完整数据包的时间。这些是数据结构。

using System;

namespace MyProject {

  public sealed class GuidConverter : JsonConverter<Guid> {

    public GuidConverter() { }

    public GuidConverter(string format) { _format = format; }

    private readonly string _format = "N";

    public override void WriteJson(JsonWriter writer, Guid value, JsonSerializer serializer) {
      writer.WriteValue(value.ToString(_format));
    }

    public override Guid ReadJson(JsonReader reader, Type objectType, Guid existingValue, bool hasExistingValue, JsonSerializer serializer) {
      string s = (string)reader.Value;
      return new Guid(s);
    }

  }
}

到目前为止,我在[JsonConverter(typeof(GuidConverter))] // defaults to format of "N" public Guid MyGuid { get; set; } 中第1108行(主分支)下方编写的主要代码是

[JsonConverter(typeof(GuidConverter), "X")]
public Guid MyGuid { get; set; }

我希望它能给我来自packetbuf的地址,但它始终为NULL。另外,我怀疑它仅在目标节点上运行,而不在中间节点上运行。

1 个答案:

答案 0 :(得分:0)

您可以调试执行。为此,只需在uip6.c中将DEBUG_NONE设置为DEBUG_PRINT,然后解析串行日志以查找数据包采用的路径。