Как заказать столбец моей файловой системы в соответствии с другой переменной? [dубликат]

Как говорили другие, ARP - это путь. Ниже приведена реализация второго предложения jqnos на основе этого примера в GitSpot .

Требуются две библиотеки:

  1. системная библиотека для захвата сетевого трафика : Linux-based: libpcap из www.tcpdump.org Windows: winpcap из www.winpcap.org
  2. japcap java-библиотека, доступная из сайт jpcap sourceforge , который обеспечивает высокоуровневый интерфейс к первой библиотеке через открытый класс JNI GetMACAddress {/ ** * * @param ip address, содержащий IP * @return MAC-Address как форматированный String * @throws IOException * @throws IllegalArgumentException * / public static String getMACAdressByIp (Inet4Address ip) throws IOException, IllegalArgumentException {byte [] mac = GetMACAddress.getMACAddressByARP (ip); StringBuilder formattedMac = new StringBuilder (); boolean first = true; for (byte b: mac) {if (first) {first = false; } else {formattedMac.append (":"); } Строка hexStr = Integer.toHexString (b & amp; 0xff); if (hexStr.length () == 1) {formattedMac.append ("0"); } formattedMac.append (hexStr); } return formattedMac.toString (); } private static byte [] getMACAddressByARP (Inet4Address ip) throws IOException, IllegalArgumentException {NetworkInterface networkDevice = getNetworkDeviceByTargetIP (ip); JpcapCaptor captor = JpcapCaptor.openDevice (networkDevice, 2000, false, 3000); captor.setFilter ("arp", true); JpcapSender отправитель = captor.getJpcapSenderInstance (); InetAddress srcip = null; for (NetworkInterfaceAddress addr: networkDevice.addresses) if (addr.address instanceof Inet4Address) {srcip = addr.address; ломать; } byte [] broadcast = new byte [] {(byte) 255, (byte) 255, (byte) 255, (byte) 255, (byte) 255, (byte) 255}; ARPPacket arp = new ARPPacket (); arp.hardtype = ARPPacket.HARDTYPE_ETHER; arp.prototype = ARPPacket.PROTOTYPE_IP; arp.operation = ARPPacket.ARP_REQUEST; arp.hlen = 6; arp.plen = 4; arp.sender_hardaddr = networkDevice.mac_address; arp.sender_protoaddr = srcip.getAddress (); arp.target_hardaddr = трансляция; arp.target_protoaddr = ip.getAddress (); EthernetPacket ether = новый EthernetPacket (); ether.frametype = EthernetPacket.ETHERTYPE_ARP; ether.src_mac = networkDevice.mac_address; ether.dst_mac = широковещательная передача; arp.datalink = эфир; sender.sendPacket (АРП); while (true) {ARPPacket p = (ARPPacket) captor.getPacket (); if (p == null) {throw new IllegalArgumentException (ip + "не является локальным адресом"); } if (Arrays.equals (p.target_protoaddr, srcip.getAddress ())) {return p.sender_hardaddr; }}} private static NetworkInterface getNetworkDeviceByTargetIP (Inet4Address ip) бросает IllegalArgumentException {NetworkInterface networkDevice = null; NetworkInterface [] devices = JpcapCaptor.getDeviceList (); loop: for (NetworkInterface device: devices) {для (NetworkInterfaceAddress addr: device.addresses) {if (! (addr.address instanceof Inet4Address)) {продолжить; } byte [] bip = ip.getAddress (); byte [] subnet = addr.subnet.getAddress (); byte [] bif = addr.address.getAddress (); for (int i = 0; i & lt; 4; i ++) {bip [i] = (байт) (bip [i] & amp; subnet [i]); bif [i] = (байт) (bif [i] & amp; subnet [i]); } if (Arrays.equals (bip, bif)) {networkDevice = device; разрыв петли; }}} if (networkDevice == null) {throw new IllegalArgumentException (ip + "не является локальным адресом"); } return networkDevice; }}

46
задан Gregory Saxton 11 May 2011 в 17:29
поделиться

1 ответ

Вы хотите функцию reorder () :

  breadth_data & lt; - transform (breadth_data, Stakeholder = reorder (Заинтересованное лицо, значение))  

Что дает:

reordered barplot [!d6]

Если вы хотите, чтобы они были наоборот, простой способ - просто использовать порядок ( ) в Значение внутри вызова reorder () :

  breadth_data & lt; - transform (breadth_data, Stakeholder = reorder (  Заинтересованность, заказ (значение, убывающее = ИСТИНА)))  
70
ответ дан Gavin Simpson 15 August 2018 в 19:15
поделиться
  • 1
    Или используйте -Value внутри вызова изменить порядок , чтобы изменить направление. – Richie Cotton 11 May 2011 в 17:56
  • 2
    @Richie - конечно (похлопывает лицо!) - явно не думая прямо это арво! – Gavin Simpson 11 May 2011 в 18:24
  • 3
    Спасибо, @Gavin и @Richie! Отлично! Я ценю помощь. – Gregory Saxton 11 May 2011 в 19:19
  • 4
    Я также использую 1 / Value для повторного заказа в противоположном направлении. Это сработало! :-) – George D Girton 6 June 2018 в 20:32
Другие вопросы по тегам:

Похожие вопросы: