Networking :: Relay UDP Broadcast Using Netcat/Socat?
May 7, 2010
Here is my problems :I have two networks :1. LAN (10.1.x.x subnet 255.255.0.0), and2. my internet public (IP 202.xx.xxx.xxxx subnet 255.255.255.240)I have an application in my LAN PC (10.1.2.240) which broadcast udp packet to its client. The client in my LAN can receive the udp packet, no problem.My question is how netcat/socat can RELAY the udp broadcast packet to one of my IP public address so the message can be received by other client from internet ?
trying to create something that will periodically send messages to a serial device using socat, take the response from the device and format it, then take the formated data and send it out UDP to a specific IP/Port.I tried to do something along the lines ofsocat <readline> <serial device> | parse script/program | socat -u <readline> <UDP:IP:Port> but didn't have any success.socat READLINE,history=$HOME/.cmd_history /dev/ttyS1,raw,echo=0,crnl | format.sh | socat -u READLINE,history=$HOME/.cmd_history UDP:IP:Port
I am trying to redirect connection to port 8980 to execute a telnet command to a local machine by issuing the following command : In Server 1 : socat TCP-LISTEN:8980,fork EXEC:/myscript,reuseaddr
My script contains #!/bin/bash telnet 192.168.20.12 //local Server 2
I am sending Binary data from the client to Server 2 via Server 1. So it happens that I have some characters in Hex translated to special characters in ASCII like open brackets or Commas etc.. and that closed the socket between the two machines.
Friends i have an idea to broadcast few local TV channels to the world via internet.But friends i can't directly broadcast from my country because of bandwidth.friends is there a way to do this through a remote server server? i just need to input my stream to a remote server and then broadcast it from the server.I can stream channels to the server from my country through a 10mbbs connection.
I'm wondering if I can use netcat to listen to a UDP port and display ALL incoming packets, no matter where they're from. If I just do 'nc -u -l 1234' then netcat will listen for incoming packets and connect() to the source address of the first one it sees (I can see this with strace). Is there any (standard) way to stop the connect() call? I can make a hack to block connect() with a function of my own, but that'd be ugly
I connected two machines, I have their given of the addresses ip in a static way and not with DHCP. I gave to the machine server the address: 192.168.0.1, and in the machine client the address 192.168.0.2.
I've tried to use netcat in the past and assumed it was my stupidity that was preventing it from working... but this is getting ridiculous. I'll execute nc -l 3333 on a server at 192.168.0.105 (after opening it on the firewall of course) then I run nc 192.168.0.105 3333 on my laptop (from 192.168.0.101). and nothing happens... i start typing and nothing comes up on the terminal.
I run nc -z 192.168.0.105 80 which should ideally do a port scan of port 80 on that server (of which I'm running a web server that clearly works) but it doesnt even give me any feedback. Nothing happens. Now when I use the verbose flag i see that I am indeed connecting to the specified port on the server successfully (so the port scan one is a success but only with the verbose flag... which shouldnt be the case I believe). But still once I have the server listening and the laptop connected... I type in both windows and nothing happens...
i have 3 servers in 2 dcs as follows; server 1 (dc1 - dmz) --- server 2 (dc1 - internal) --- server 3 (dc2 - internal) Now I have an application in server1 that have to connect to port 44000 in server 3 but dc refuse to open connection saying they do not open connections between dmz and dc2 (i have no say over this).
However I can connect to virtually any port from server1 <-> server2 and also server2 <-> server3. Is it possible to do something like;
server1 <-> server2 <-> server3:44000 using nc to get the app work.
The problem Im facing is that I cant seem to intercept the data going between the client and the server. I want to be able to have the data coming to the server in a variable, manipulate it and send it to the client, and the other way, have the data coming to the client in a variable, manipulate it and send it to the server.
Im running on an embedded device where tee, awk and many other commands are absent. how can I redirect the data to a variable, manipulate it and pass it to the other side, that is the question.
My issue is that i'm trying to send emails with postfix and gmail as the mail relay,i'm trying to send emails to my self by sendmail -bv user@gmail.com
In the logs, i can understand that it been delivered to the destination, taken from: /var/log/mail.log: Apr 30 00:05:23 moni postfix/pickup[10490]: 9C7552170C: uid=0 from=<root> Apr 30 00:05:23 moni postfix/cleanup[10495]: 9C7552170C: message-id=<20110429210523.9C7552170C@moni.localdomain> Apr 30 00:05:23 moni postfix/qmgr[10491]: 9C7552170C: from=<root@moni.localdomain>, size=283, nrcpt=1 (queue active) code....
When login in my gmail account i can't see nothing under the sent / inbox / spam folder.
it's seems like the mail are been sent.. but nothing is happening.
all I get is the broadcast address can be used to send packets of information to all computers on a network simultaneously. Can that be used during MPI programming or anything of the such? What is the day to day use of the broadcast address?
This is not a linux specific question more of a general network issue with the hope that someone may have already done this under linux.My problem:I have a red hat linux machine transmitting IP multicast packets onto an ethernet gigabit network (cisco switch).Wireshark (running on a different red hat linux box confirms packets on network.
I need to configure network. I have configured a labtop "1" as a wireless Access point. And connected 2 laptops. I want to broadcast from a labtop "2" a video and read it on labtop 3. This broadcast will be done first time using VLC server then using apache server.
I have a Dell Vostro 1400 with a BCM4311 Broadcom wireless card that I just reinstalled with 11.04 from 10.04. I have the drives installed and it seams to be working when i run the 'Additional Drives', but I can't get the wireless adapter broadcasting. I followed the instructions given in the knowledge base on installing Broadcom Wireless, to see if I could get it running and that is where I saw the difference between the example and my computer when writing the 'sudo lshw -C network' command. In the example it said it was broadcasting under configuration (just like my wired networks below) and in mine it does not (see below for copy past).
I can't find a tickbox in the systemtray to enable the wirless networking that I had before the update to 11.04 (the 'Enable Networking' tickbox is still there and the wired network works fine - that is how I got online to do this post). I have the hardware switch turned on and I have been in the BIOS and made sure that the Wireless is enabled.Anyone who knows what could be wrong? Where could I go from here?Quote:
I am basically from system side and often confused about the calculation of the IP addresses.Just i want to know that what how can i calculate the following of a IP Address:
(1) Available IP in a Network (2) Broadcast IP (3) Network Prefix or Net Mask
I'm using F15 with two nics, each on different subnets 192.168.1.0/25 and 192.168.1.128/25. My issue is that on boot my 192.168.1.2/25 interface sets a broadcast address of 192.168.1.255 which is incorrect I believe. Its broadcast should be 192.168.1.127. I've tried setting the broadcast param in ifcfg-p3p1 file "BROADCAST=192.168.1.127" with no benefit.I can change this after boot of course, but that removes my default gateway for some reason.
So I just changed my network card settings recently, and I'm now getting no response when I ping the broadcast address for them... the cards are all connected through a switch with IP addresses 192.168.0.x, broadcast 192.168.0.255... ifconfig on all of them shows UP BROADCAST RUNNING MULTICAST, but nobody responds to a broadcast packet. Any thoughts?
EDIT: Pinging each machine individually works fine.
socat - exec:'bash -li',pty,stderr,ctty -> bash: no job control in this shell
What options should I use to get fully fledged shell as I get with ssh/sshd? I want to be able to connect the shell to everything socat can handle (SOCKS 5, UDP, OpenSSL), but also to have a nice shell which correctly interprets all keys, various Ctrl+C/Ctrl+Z, tab completion, up/down keys (with remote history).
- Found "setsid" socat option. It fixes "no job control". Now trying to fix Ctrl+D. - socat file:`tty`,raw,echo=0 exec:'bash -li', pty, stderr, setsid, sigint, sane. Not it handles Ctrl+D/Ctrl+Z/Ctrl+C well, I can start Vim inside it, remote history is OK.
I'm trying to use a C++ program to communicate through a serial port on Ubuntu 10.04. I've installed LibSerial and for now I'm using virtual serial ports using socat. I'm getting an error on compiling (found below). But step by step, first I start the virtual serial ports:
Code: (MYNAME@MYCOMPUTER):~$ socat -d -d PTY: PTY: 2010/10/17 22:04:18 socat[18575] N PTY is /dev/pts/2
I am working on uClinux/almost same as Linux. I am new to socket programming. I have two micro controllers running on same code. Simple run with arguments mean send merged string. run 1st micro controller (Send): ./Name "anystring" run 2st micro controller (Recive):/Name
My code is: int receive() { // Create socket int sock_fd; struct sockaddr_in addr; char buffer[kBufferSize]; int bytes_received=0; int addr_len = sizeof(addr); printf("receive start "); sock_fd = socket(AF_INET, SOCK_DGRAM, 0); if ( sock_fd == -1 ) { printf("receive Create "); // Error occurred return 0; } printf("Res Create sucee "); // Create address from which we want to receive, and bind it memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = INADDR_ANY; addr.sin_port = htons(kPortNumber); if ( bind(sock_fd, (struct sockaddr*)&addr, sizeof(addr)) < 0 ) { printf("receive bind "); // Error occurred return 0; } printf("Bind Succeful sucee "); while ( 1 ) { // Receive a message, waiting if there's nothing there yet bytes_received = recvfrom(sock_fd, buffer, kBufferSize-0, 0, (struct sockaddr*)&addr, &addr_len); if ( bytes_received < 0 ) { // Error occurred printf("receive bytes "); return 0; } printf(" bytes_received succeful "); printf("Ressocketstring : %s ",buffer); memset(Ressocketstring,0x00 , sizeof(Ressocketstring)); strcpy(buffer,Ressocketstring); printf("Ressocketstring : %s ",Ressocketstring); printf(" "); printf("Hello Receive finished"); // Now we have bytes_received bytes of data in buffer. Print it! fwrite(buffer, sizeof(char), bytes_received, stdout); } } int transmit(char * data, int length) { int sock_fds[kMaxSockets]; // Obtain list of all network interfaces /* struct ifaddrs *addrs; if ( getifaddrs(&addrs) < 0 ) { // Error occurred return 0; } */ // Loop through interfaces, selecting those AF_INET devices that support broadcast, but aren't loopback or point-to-point struct sockaddr_in addr; int number_sockets = 0; struct hostent *he; /* const struct ifaddrs *cursor = addrs; while ( cursor != NULL && number_sockets < kMaxSockets ) { if ( cursor->ifa_addr->sa_family == AF_INET && !(cursor->ifa_flags & IFF_LOOPBACK) && !(cursor->ifa_flags & IFF_POINTOPOINT) && (cursor->ifa_flags & IFF_BROADCAST) ) { // Create socket*/ sock_fds[number_sockets] = socket(AF_INET, SOCK_DGRAM, 0); if ( sock_fds[number_sockets] == -1 ) // Error occurred { printf("Error Create "); return 0; } he = gethostbyname((char *)BCASTADDRESS) ; if (he==NULL ) {printf("Error gethostbyname "); herror("gethostbyname"); printf("Error host "); exit(1); } printf("Res He "); // Create address from which we want to send, and bind it memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr = *((struct in_addr *)he->h_addr);//((struct sockaddr_in *)cursor->ifa_addr)->sin_addr; addr.sin_port = htons(kPortNumber); if ( bind(sock_fds[number_sockets], (struct sockaddr*)&addr, sizeof(addr)) < 0 ) { // Error occurred printf("Error bind "); return 0; } // Enable broadcast int flag = 1; if ( setsockopt(sock_fds[number_sockets], SOL_SOCKET, SO_BROADCAST, &flag, sizeof(flag)) != 0 ) // Err occur { printf("Error Enable "); return 0; } number_sockets =1; printf("Succes 1 "); printf("transmit Create "); // Initialise broadcast address memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = INADDR_BROADCAST; addr.sin_port = htons(kPortNumber); // Send through each interface int i; for ( i=0; i<number_sockets; i++ ) { if ( sendto(sock_fds[i], data, length, 0, (struct sockaddr*)&addr, sizeof(addr)) < 0 ) { printf("Error Send "); // Error occurred return 0; } printf("Succes 2 "); } return 1; } void MergeMessage( ) { memset(socketstring,0x00,sizeof(socketstring)); sprintf(socketstring,"%s@%s@%s@%s@%s@%s@%s@%s@%s@%s@%s ",Tmeg.s1,Tmeg.s2,Tmeg.s3,Tmeg.s4,Tmeg.s5,Tm eg.s6,Tmeg.s7,Tmeg.s8,Tmeg.s9,Tmeg.s10,Tmeg.s11); printf(" MergeSocketMessage : %s ",socketstring); } int main (int argc, char** argv) { int fd=0,bdc=0; struct ifreq ifr; printf("Tsarting man "); fd = socket(AF_INET, SOCK_DGRAM, 0); strncpy(ifr.ifr_name, "eth0", IFNAMSIZ-1); ioctl(fd, SIOCGIFADDR, &ifr); close(fd); memset(MYIP,'-',sizeof(MYIP)); memset(BCASTADDRESS,'-',sizeof(BCASTADDRESS)); strcpy(MYIP, inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr)); printf("Etho: %s ,len:%d ", MYIP,strlen(MYIP)); for(bdc=strlen(MYIP);MYIP[bdc-1]!='.';bdc--) {} strncpy(BCASTADDRESS,MYIP,bdc-1); strcat(BCASTADDRESS,".255"); printf("BCASTADDRESS: %s ,len:%d ", BCASTADDRESS,strlen(BCASTADDRESS)); printf("Initial Broad Cast message "); { /*s0"0" (id=76) s1"500" (id=77)s2"100" (id=78)s3"100" (id=78)s4"startVD" (id=79) s5"lighting" (id=80)s6"reading" (id=81)s7"Anna" (id=82)s8"0" (id=76) s9"";s10"" (id=64)s11"" (id=64)*/ strcpy(Tmeg.s0,"0"); strcpy(Tmeg.s1,"500");strcpy(Tmeg.s2,"100");strcpy(Tmeg.s3,"100"); strcpy(Tmeg.s4,"startvd");strcpy(Tmeg.s5,"lighting");strcpy(Tmeg.s6,"reading"); strcpy(Tmeg.s7,"anna");strcpy(Tmeg.s8,"0"); } MergeMessage (Tmeg); if( strlen(argv[1]) ) { //strcpy(socketstring,Tmeg,sizeof(Tmeg)); if(transmit(socketstring, strlen(socketstring) ) ) { printf(""%s" transmitted. ", socketstring); } else { printf("Error occurred: %s ", strerror(errno)); return 1; } } else { for( ; ; ) { if ( argc < 2 ) // No argument: Just listen { printf("Listening... "); if ( !receive() ) { printf("Error occurred: %s ", strerror(errno)); return 1; } return 0; } } } printf("Finished "); return 0; } //////////////// .h file is ///////////// //#define WIN32_LEAN_AND_MEAN// Exclude rarely-used stuff from Windows headers #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <net/if.h> #include <fcntl.h> #include <netdb.h> #include <signal.h> #include <sys/wait.h> #include <sys/ioctl.h> #define SubLen50 //#include <ifaddrs.h> #include <errno.h> char MYIP[20]; char BCASTADDRESS[20]; typedef struct { char s0[SubLen]; char s1[SubLen]; char s2[SubLen]; char s3[SubLen]; char s4[SubLen]; char s5[SubLen]; char s6[SubLen]; char s7[SubLen]; char s8[SubLen]; char s9[SubLen]; char s10[SubLen]; char s11[SubLen]; }msg_struct; msg_struct Sendmsg; msg_struct Tmeg; //Recivemsg; Boolean pri[6]; char socketstring[SubLen*12]; char Ressocketstring[SubLen*12]; int kBufferSize = (SubLen*12);
I am on a 172.16.x.x network with about 60 Windows XP home and Vista home clients in a peer-to-peer workgroup that uses DHCP to assign addresses. About half the traffic on my LAN is netbios broadcast. I do not want to do a WINS server because I do not want to have to manually change the registry on every machine. This is only for local name resolution and I do not have any web servers or e-mail servers. I do not have access to a Windows server to use as a DNS server. I am on Debian and using BIND but am open to other suggestions.