How to get values for ipi_ifindex for sendmsg()? - linux

Using sendmsg() it is possible to specify from which interface a datagram will be sent, if a value is set for in_pktinfo.ipi_ifindex.
If the packet is a response to a datagram received with recvmsg() I can get the interface value from there.
If I just know that the interface if 'eth0' or 'eno1', how can I look up the corresponding `in_pktinfo.ipi_ifindex' value?

Use if_nametoindex() to convert the interface name to an index.
if_indextoname() does the reverse.

Related

Can't specify AS_PATH attribute in BGP packet [Scapy]

When using Scapy, I am unable to set the AS_PATH attribute. I have tried following the answer provided in this StackOverflow page How to use AS_PATH attribute in scapy for BGP?, but it did not work. I have also tried inputting the following statements in the attribute parameter, but I have not been able to.
setAS=BGPPathAttr(type_flags="Transitive", type_code="AS_PATH", attribute="2")
setAS=BGPPathAttr(type_flags="Transitive", type_code="AS_PATH",attr_len=None,attribute=BGPPAAS4BytesPath(segments=BGPPAAS4BytesPath().ASPathSegment(segment_type=2,segment_length=None,segment_value=[2])))
My desired outcome is to send a packet with the AS_PATH value of 2.
AS_PATH is well-known mandatory, not transitive.

Best way to validate DICOM connection request with pynetdicom

What is the preferred way to validate requested DICOM connection against a list of known hosts?
I can connect to the EVT_CONN_OPEN event. But in that, the event.assoc.requestor.info.ae_title element is always empty (b'').
I see from a TCP network analysis, that the name is transmitted. So, where is it?
What is the right way to validate the requesting host?
You could try using EVT_REQUESTED instead, it gets triggered after an association request is received/sent and the AE title information should be available at that point. Unfortunately EVT_CONN_OPEN is triggered on TCP connection which occurs prior to the association request.
If you don't like the host's details you can use the handler to send an association rejection message using event.assoc.acse.send_reject() or abort with event.assoc.abort().
If you're only interested in validating against the AE title you can use the AE.require_calling_aet property to restrict associations to those with matching AE titles.
For the benefit of anyone else looking this up, the correct stage to look this up is in the EVT_REQUESTED event. However you will likely find the details aren't filled in (they are populated AFTER the handler has been called).
So if you want to locate the callers AE in EVT_REQUESTED, you need to locate the A_ASSOCIATE primitive and read them from there. So for example in your handler you can do this to reject remotes:
def handle_request(event):
req_title = event.assoc.requestor.primitive.calling_ae_title.decode('ascii')
if req_title != 'MyAET':
event.assoc.acse.send_reject(0x01, 0x01, 0x03)
return
At least for 1.5.7.

How to convert REST API's request body of String datatype into JSON Object in Node JS and test that in Postman?

I have a Node JS application running with Express and mongodb. I have a use case where my device sends data to my server. It might be JSON data or Comma-Separated String(Only String, not CSV file). I need to check which type of data is coming and manipulate that to JSON if request body would be a String. When I was trying to display the data type of data being sent to the server, it's displaying as "object" even after giving the "String" data as input. And the operation is getting successful but data is not inserting into the database. Can anyone help me in resolving this issue?
Sample Payload(request.body) would be,
"heat:22,humidity:36,deviceId:sb-0001"
Expected response is,
{
"heat": "22",
"humidity": "36",
"deviceId": "sb-0001"
}
#Aravind Actually typeof will returns "string" if operand is a string.So please check whether the string is coming or not in body, because if it is null then typeof will return "object".
I need to check which type of data is coming and manipulate that to JSON ...
HTTP is build upon the media-type concept that defines the syntax used in the payload of that type as well as the semantics of the elements used within that payload. You might take a look at how HTML defines forms to get a grip what a media-type specification should include. Through content negotiation client and server agree on a common media-type and thus a representation format to exchange payloads for supported by both. This simply increases interoperability between the participants as they exchange data in well-defined, hopefully standardized, representation formats both understand and support.
Through Accept headers a receiver can state preferences on which types to receive, including a weighting scheme to indicate that a certain representation format is preferred over an other one but the recipient is also fine with the other one, while a Content-Type header will indicate the actual representation format being sent.
RFC 7111 defines text/csv for CSV based representations and RFC 8259 specifies application/json for JSON payload. As the sender hopefully knows what kind of document it sends to the receiver, you can use this information to distinguish the payload on the receiver side. Note however that according to Fielding true REST APIs must use representation formats that support hypertext-driven interaction flows to allow clients to take further actions upon the payload received without having to invoke some external documentation. Both, JSON and CSV, by default don't support such an interaction model, that is abreviated with the term HATEOAS. For your simple scenario the content type negotiation might though be sufficient enough to solve your needs.
In terms of processing CSV and converting the data to JSON this is simply a matter of splitting up the CSV string on the delimiter symbol (, in the sample) to key-value pairs and then splitting the key and values further on the : symbol and adding these to a new JSON object. There is also a csvtojson library available at NPM that you might utilize in such a case.

device types in CreateAsyncFind function of UPnP

Please tell me what is range of values I can give in device type parameter of CreateAsyncFind() function. How it detects the devices basis on string given ???
Thanks in Advance !!!
Each UPnP device has its own unique type and URI, you will need to supply the URI in your call to CreateAsyncFind(). As an example to search for a MediaServer:3 device you would use urn:schemas-upnp-org:device:MediaServer:3.
Checkout Device Categories for a list of different device categories.

Why the route items in the route table(fetched via netlink socket) doesn't have netmask info?

I'm writing a program to find out which network interface is the best to connect to a specified target address.
Right now, I can get the route table via netlink socket APIs, but seems there is no netmask infos in it. I read the manual of rtnetlink, in all rtattr items, there is no netmask infos, just RTA_DST, RTA_SRC, RTA_GATEWAY... defined.
So, how to check out the netmask infos in route table? Just like we can see in route -n outputs.
Thanks a lot.
The prefix length associated with RTA_DST is in the rtm_dst_len field of the rtmsg, not in an rtattr. (I guess because it's a fixed-size field, unlike RTA_DST, which varies in size depending on the family.)

Resources